在为生产预编译资产时,没有方法错误,[]未定义nil类

时间:2016-10-27 07:03:27

标签: ruby-on-rails-3.2 asset-pipeline precompile rails-sprockets

在我的开发模式下,当我使用命令

预编译应用程序的资源时
rake bundle exec rake assets:precompile RAILS_ENV=production --trace

我收到以下错误

NoMethodError: undefined method '[]' for nil:NilClass
/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb:278:in `sprockets_context'
/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb:124:in `asset_path'
/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb:137:in `asset_url'
/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb:155:in `image_url'
/home/sable/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/script/tree/funcall.rb:143:in `_perform'

当我使用 rails s 命令在开发模式下运行我的服务器时,我认为可能是导致预编译错误的错误,如下所示

ActionController::RoutingError (No route matches [GET] "/javascripts/defaults.js"):

我通读了rails资产管道和链轮,但我似乎无法解决所有问题并解决问题,因为我是rails框架的新手, 任何方向或帮助将不胜感激。

解决方案 我编辑了文件

/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb 

就像,从第120行开始,我添加了一行" put' path'"在第122行,以便我可以看到预编译错误来自的路径

def asset_path(path, options = {})
    path = path.value
    puts path........

我保存了文件,然后再次运行

rake bundle exec rake assets:precompile RAILS_ENV=production --trace

我看到我正在使用sasss帮助方法' image-url'在一个css文件中所以预编译器无法以某种方式获取该文件,我创建了一个扩展名为css.scss的新文件,这解决了我的问题,我无法解释它,因为我不知道真的完全理解它,但设法跟随人们的经验,结帐,http://guides.rubyonrails.org/asset_pipeline.html#css-and-sassHow to reference images in CSS within Rails 4

1 个答案:

答案 0 :(得分:0)

尝试以下命令。

  

RAILS_ENV =生产包exec rake assets:precompile --trace