资产编译在服务器环境中崩溃,并显示:“NoMethodError: undefined method `[]' for nil:NilClass”

问题描述 投票:0回答:4

为了这个我已经抓狂了。我一直和资产管道关系不好,它总是给我带来麻烦..今天又来了..

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

$ 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()
助手似乎有效..但同样,不知道为什么..

ruby-on-rails ruby ruby-on-rails-4 asset-pipeline sprockets
4个回答
45
投票

我遇到了同样的问题,结果是一个包含

asset-url
的 css 文件,但没有
.scss
扩展名。奇怪的是,我可以在本地编译资源,但不能在服务器上编译。


1
投票

问题是因为 .css 扩展名而不是 .scss。我已经在 .scss 上更改了它并且它起作用了。


0
投票

以下是 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。


-1
投票

Heroku 有一篇关于此的文章。 在本地预编译它并添加所有这些文件,尤其是

/public/assets/manifest.yml
。 Heroku 应该忽略预编译并继续。

© www.soinside.com 2019 - 2024. All rights reserved.