资产编译崩溃在服务器环境中:“NoMethodError:未定义的方法`’为nil:NilClass”

我一直在为这一个拔头发。 我一直与资产管道关系不好,总是给我带来麻烦……今天又来了……

当我尝试在本地编译我的资产时,一切都很好:

$ 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。

我的项目设置如下: 带有gem的常规rails 4 app,其中包含代表模板的资产。 我使用以下行来确保编译所有内容:

 config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg) 

谁知道如何解决这个问题,或者如何调试它?

编辑

删除所有asset-url()帮助程序似乎工作..但再次,没有线索为什么..

我有samme问题,结果是一个包含asset-url的css文件没有.scss扩展名。 奇怪的是,我可以在本地编译资产,但不能在服务器上编译。

问题是因为.css扩展而不是.scss。 我在.scss上更改了它并且它有效。

Heroku有一篇关于此事的post。 在本地预编译并添加所有这些文件,尤其是/public/assets/manifest.yml 。 Heroku应该忽略预编译并继续。