【问题标题】:Rails: finding out which file causes Sass::SyntaxError exception?Rails:找出哪个文件导致 Sass::SyntaxError 异常?
【发布时间】:2016-08-08 02:40:38
【问题描述】:

当我跑步时:

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 启用时发生。如果我禁用它,资产将被预编译而不会出现问题。

【问题讨论】:

  • 尝试在开发中预编译断言,它应该为您提供导致此问题的导入。另一种方法是在生产中访问您的application.css 并检查行#19419
  • @Dimitry_N 该错误仅在启用 css 压缩器时发生(不在开发模式下)。我尝试在生产环境中生成没有压缩器的 CSS(它可以工作),然后检查显示错误的行。但是第 19419 行是文件的结尾。
  • @cimmanon 抱歉,这些问题不是重复的。这些问题与您的 CSS 出现错误时发生的问题有关。我的问题与仅在启用 CSS 压缩器时发生的问题有关。换句话说,压缩过程失败了。
  • scss-lint 怎么样?您是否尝试过通过 /assets/stylesheets/vendor... 进行 linting?

标签: ruby-on-rails ruby ruby-on-rails-4 sass


【解决方案1】:

我遇到了完全相同的问题。输出只告诉你它在哪一行失败,而不是实际的文件名。真正简单的快速和肮脏的修复是打开文件抛出错误“/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb”和在初始化器中添加 puts:

  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

【讨论】:

    【解决方案2】:

    我找不到让 Rails 提供有关导致问题的文件的更多信息的方法。

    因此解决方案是编写一个删除 CSS 文件的脚本,运行 assets:precompile 并检查返回码。我在所有 css/scss 文件上循环运行这个脚本,直到 assets:precompile 最终工作。这是导致问题的第 3 方 CSS 文件。

    我不得不手动检查文件,直到发现一些带有 // 对 CSS 无效的 cmets。

    删除这些 cmets 后,rake assets:precompile 可以处理所有文件。

    【讨论】:

    • 那么您能否再次解释一下这个问题不是重复的?因为看起来你的 CSS 确实有错误。哦,你使用了这个问题中给出的确切解决方案:stackoverflow.com/questions/23046447/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多