为了这个我已经抓狂了。我一直和资产管道关系不好,它总是给我带来麻烦..今天又来了..
当我尝试在本地编译我的资产时,一切都很好:
$ 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 应用程序,带有包含代表模板的资源的 gem。我使用以下行来确保所有内容都已编译:
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg)
有人知道如何解决这个问题,或者如何调试它吗?
编辑
删除所有
asset-url()
助手似乎有效..但同样,不知道为什么..
我遇到了同样的问题,结果是一个包含
asset-url
的 css 文件,但没有 .scss
扩展名。奇怪的是,我可以在本地编译资源,但不能在服务器上编译。
问题是因为 .css 扩展名而不是 .scss。我已经在 .scss 上更改了它并且它起作用了。
以下是 scss 助手:
image-url
font-url
video-url
audio-url
javascript-url
stylesheet-url
asset-data-url
如果你的 css 文件中有其中之一,那就不正常了。处理文件时,Sprocket 会升起
NoMethodError: undefined method `[]' for nil:NilClass
。
解决方案 1:从此文件中删除所有 scss 帮助程序。
或
解决方案 2:将文件扩展名更改为 scss。
Heroku 有一篇关于此的文章。 在本地预编译它并添加所有这些文件,尤其是
/public/assets/manifest.yml
。 Heroku 应该忽略预编译并继续。