Rails:找出哪个文件导致 Sass::SyntaxError 异常? [英] Rails: finding out which file causes Sass::SyntaxError exception?

查看:61
本文介绍了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 中是否有调试此问题的选项?

How can I find out the file that causes this exception? Is there an option in sass-rails to debug this issue?

注意:此应用程序的 CSS/Javascript 正在开发模式下工作.此异常仅在生产中预编译资产或运行 rspec 功能测试时发生.

Note: the CSS/Javascript of this application is working in development mode. This exception only happens when precompiling assets in production or when running rspec features tests.

注意 2:此问题仅在启用 config.css_compressor 时发生.如果我禁用它,资产会被预编译而不会出现问题.

Note 2: this issue only happens when config.css_compressor is enabled. If I disable it, the assets are precompiled without issues.

推荐答案

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

I had the exact same problem. The output only tells you what line it fails on and not the actual filename. Really simple quick & dirty fix is to open the file throwing the error "/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.21/lib/sass/scss/parser.rb" and add a puts to the initializer:

  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 语句添加到错误之前的行中:

This will create a ton of output but when it fails you will have the filename. Alternatively, since the filename variable gets put in to the instance variable @filename you can get the line number from the first line in the backtrace (in your case 1179) and add the puts statement using the instance variable to the line before the error:

 line 1178: puts @filename

这篇关于Rails:找出哪个文件导致 Sass::SyntaxError 异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆