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

时间:2014-07-17 16:58:41

标签: ruby ruby-on-rails-4 asset-pipeline sprockets

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

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

$ 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()帮助程序似乎都有用..但同样,不知道为什么......

3 个答案:

答案 0 :(得分:44)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Heroku has a post about this.在本地预编译并添加所有这些文件,尤其是/public/assets/manifest.yml。 Heroku应该忽略预编译并继续。