2016-04-16 7 views
1

私が実行します。Rails:どのファイルでSass :: SyntaxError例外が発生するかを調べる

rake assets:precompile RAILS_ENV=production --trace 

は、私は次の例外を取得:

rake aborted! 
Sass::SyntaxError: Invalid CSS after " */": expected "}", was "" 
(sass):19419 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:1179:in `expected' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:1115:in `expected' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:1110:in `tok!' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:656:in `block' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:647:in `ruleset' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:673:in `block_child' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:666:in `block_contents' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:123:in `stylesheet' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb:39:in `parse' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/engine.rb:403:in `_to_tree' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/engine.rb:278:in `render' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/sass_compressor.rb:48:in `call' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/sass_compressor.rb:28:in `call' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/processor_utils.rb:75:in `call_processor' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/processor_utils.rb:56:in `reverse_each' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/processor_utils.rb:56:in `call_processors' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/loader.rb:134:in `load_from_unloaded' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/loader.rb:60:in `block in load' 
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.5.2/lib/sprockets/loader.rb:318:in `fetch_asset_from_dependency_cache' 
.... 

どのように私は、この例外が発生したファイルを見つけることができますか?この問題をデバッグするには、sass-railsにオプションがありますか?

注:このアプリケーションのCSS/Javascriptは開発モードで動作しています。この例外は、本番環境の資産をプリコンパイルする場合、またはrspec機能テストを実行する場合にのみ発生します。

注2:この問題は、config.css_compressorが有効になっている場合にのみ発生します。これを無効にすると、アセットは問題なくプリコンパイルされます。

+0

開発中にアサートをプリコンパイルすると、この問題の原因となるインポートが行われます。もう1つの方法は、プロダクションとチェックラインで 'application.css'にアクセスすることです。#19419 –

+0

可能な重複:http://stackoverflow.com/questions/10104865/best-practices-for-debugging-the-rails-asset-パイプラインまたはhttp://stackoverflow.com/questions/23046447/how-do-you-know-what-line-contains-a-scss-error-when-using-import-in-rails-appl – cimmanon

+0

@Dimitry_Nエラーcssコンプレッサーが有効になっている場合(開発モードではない)にのみ発生します。私は生産envでコンプレッサーなしでCSSを生成しようとしました(動作します)、エラーを示す行を確認します。しかし、19419行目がファイルの最後です。 – Fernando

答えて

2

私はまったく同じ問題を抱えていました。出力は、実際のファイル名ではなく、どの行が失敗したかだけを示します。本当にシンプルな素早い&ダーティな修正は、 "/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb"というエラーを投げるファイルを開くことです。

def initialize(str, filename, importer, line = 1, offset = 1) 
    puts filename # ADD THIS LINE. 
    @template = str 
    @filename = filename 
    @importer = importer 
    @line = line 
    @offset = offset 
    @strs = [] 
    @expected = nil 
    @throw_error = false 
    end 

これは、出力のトンを作成しますが、失敗すると、ファイル名があります。あるいは、ファイル名変数がインスタンス変数@filenameに入れられるので、(ケース1179の)バックトレースの最初の行から行番号を取得し、インスタンス変数を使用してputs文をエラーの前の行に追加することができます。

line 1178: puts @filename 
0

Railsに問題の原因となっているファイルの詳細を知らせる方法が見つかりませんでした。

解決策は、CSSファイルを削除するスクリプトを作成し、assets:precompileを実行して戻りコードをチェックすることでした。私はこのスクリプトを資産:プリコンパイルが最終的に働くまで、すべてのcss/scssファイルでループしていました。それは問題を引き起こした第三者のCSSファイルでした。

私は、CSSで有効ではない//とのコメントが見つかるまで手動でファイルをチェックしなければなりませんでした。

これらのコメントを削除した後、rake assets:すべてのファイルでプリコンパイルが機能しました。

+0

この質問が重複ではないことを親切に説明してください。あなたのCSSにエラーがあるように見えるからです。ああ、あなたはこの質問で与えられた正確な解決策を使用しました:http://stackoverflow.com/questions/23046447/how-do-you-know-what-line-contains-a-scss-error-when-using-importイン・レール・アプリ – cimmanon

関連する問題