簡體   English   中英

Rails:找出哪個文件導致Sass :: SyntaxError異常?

[英]Rails: finding out which file causes Sass::SyntaxError exception?

當我跑步時:

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時,才會發生此問題。 如果禁用它,資產將被預編譯而不會出現問題。

我有同樣的問題。 輸出僅告訴您失敗的行,而不是實際的文件名。 真正簡單快捷的修復方法是打開文件並拋出錯誤“ /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變量放入實例變量@filename中,因此您可以從回溯中的第一行獲取行號(在您的情況下為1179),然后使用實例變量將puts語句添加到錯誤之前的行:

 line 1178: puts @filename

我找不到使Rails向我提供有關導致問題的文件的更多信息的方法。

因此,解決方案是編寫一個腳本,該腳本刪除CSS文件,運行asset:precompile並檢查返回代碼。 我在所有css / scss文件上運行了該腳本循環,直到asset:precompile終於起作用。 這是導致此問題的第3方CSS文件。

我不得不手動檢查文件,直到找到帶有//的注釋,這些注釋對CSS無效。

刪除這些注釋后,rake asset:precompile可用於所有文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM