在我的开发模式下,当我使用命令预编译应用程序的资产时
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 assets pipeline 和 sprockets,但似乎无法全神贯注并解决问题,因为我是 rails 框架的新手,任何方向或帮助将不胜感激。
解决方案 我已经编辑了文件
/home/sable/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.3/lib/sprockets/sass_processor.rb
比如,从第 120 行开始,我在第 122 行添加了“puts 'path'”行,这样我就可以看到预编译错误来自的路径
def asset_path(path, options = {})
path = path.value
puts path........
我保存了文件然后再次运行
rake bundle exec rake assets:precompile RAILS_ENV=production --trace
我看到我在 css 文件中使用了 sasss 辅助方法“image-url”,因此预编译器无法以某种方式访问该文件,我创建了一个扩展名为 css.scss 的新文件,这解决了我的问题,我可以'不能更好地解释它,因为我并不完全理解它,但设法从人们的经验,结帐,http ://guides.rubyonrails.org/asset_pipeline.html#css-and-sass 和How to reference images in Rails 4 中的 CSS。