我一直在拔头发。我一直与资产管道关系不好,总是给我带来麻烦......今天又来了..
当我尝试在本地编译我的资产时,一切都很好:
$ RAILS_ENV=production rake assets:precompile --trace
但是当我与Capistrano一起部署时:
cd /var/www/xxx/releases/20140717164232 && ( RAILS_ENV=production bundle exec rake assets:precompile )
崩溃时出现以下错误:
rake aborted!
NoMethodError: undefined method `[]' for nil:NilClass
(in /var/www/xxx/releases/20140717164232/app/assets/stylesheets/application-sign-in.css)
/var/www/xxx/shared/bundle/ruby/2.1.0/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb:63:in `sprockets_context'
我真的不知道如何调试这个..在本地我无法重现它,在我的服务器上错误只是没有指向我...
我已经搜索了这个错误并尝试了几件事,但没有任何帮助。有人说通过更新来消除错误..或者通过在sass-rails gem之前添加sprockets gem。
我的项目设置如下:带有宝石的常规rails 4 app,其中包含代表模板的资产。我使用以下行来确保编译所有内容:
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg)
有谁知道如何解决这个问题,或者如何调试它?
修改
删除所有asset-url()
帮助程序似乎都有用..但同样,不知道为什么......
答案 0 :(得分:44)
我遇到了同样的问题,结果发现这是一个包含asset-url
但没有.scss
扩展名的css文件。奇怪的是,我可以在本地编译资产,但不能在服务器上编译。
答案 1 :(得分:1)
问题是因为.css扩展而不是.scss。我在.scss上更改了它并且它有效。
答案 2 :(得分:0)
Heroku has a post about this.在本地预编译并添加所有这些文件,尤其是/public/assets/manifest.yml
。 Heroku应该忽略预编译并继续。