刚刚将应用程序从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
文件以检查没有此任务的语法?
答案 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')