Rails Asset Pipeline更好的错误或堆栈跟踪

时间:2012-01-31 02:03:03

标签: ruby-on-rails ruby ruby-on-rails-3 asset-pipeline

刚刚将应用程序从rails 3.0.9升级到3.2.1,当我运行bundle exec rake assets:precompile时,我收到错误,这很好,但是回溯没有告诉我在我的css或scss文件中的语法问题是来自。我尝试greping“0ee5c0e69c92af0”,但该字符串没有出现在我的项目中。

bundle exec rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
Invalid CSS after "...0ee5c0e69c92af0": expected ";", was ".png;"

有没有办法从预编译过程中获得更好的错误消息或堆栈跟踪?有没有其他方法可以编译我的css.erb文件以检查没有此任务的语法?

3 个答案:

答案 0 :(得分:2)

我知道没有更好的方法,因为此消息是由Sprockets(实际上是CSS处理器)在将所有文件连接在一起后生成的。

你可以做的一件事(暂时)是用application:rb替换application.rb中的默认预编译数组:

config.assets.precompile = ['*.css']

然后从application.css中删除任何需求并在本地运行预编译任务。这将单独编译每个CSS文件,并希望为您提供有关问题所在位置的更多线索。

答案 1 :(得分:0)

当然,将--trace标志传递给rake:

$ bundle exec rake --trace assets:precompile

答案 2 :(得分:0)

当我升级到资产管道时,我也遇到了同样的错误,这是我的罪魁祸首。当您添加资产管道时,重要的是还要将样式表从使用url(此指向资产管道中的非指纹/非缓存文件)转换为新的image-url帮助程序(此指向指纹)资产管道中的/ cached文件)。请参阅docs中的第2.3节。

资产前管道(.sass):

#background
  background-image: url('Long Path 1920x1200.jpg')

资产后管道(.sass):

#background
  background-image: image-url('Long Path 1920x1200.jpg')

不幸的是,新的image-url帮助程序无法处理文件名中的空格,而旧的url可以处理。因此,当你运行bundle exec rake assets:precompile时,它会变得繁荣。解决方案是删除空格。

更正后的代码:

#background
  background-image: image-url('long-path-1920x1200.jpg')