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

Posted

技术标签:

【中文标题】为生产预编译资产时,没有方法错误,[ ] 未定义 nil 类【英文标题】:No method error,[ ] undefined for nil class when pre-compiling assets for production 【发布时间】:2016-10-27 07:03:27 【问题描述】:

在我的开发模式下,当我使用命令预编译应用程序的资产时

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 资产管道和 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 的新文件,这解决了我的问题,我无法更好地解释它,因为我并没有完全理解它,但设法从人们的经验中遵循,结帐,@ 987654321@ 和How to reference images in CSS within Rails 4。

【问题讨论】:

【参考方案1】:

试试下面的命令。

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

【讨论】:

以上是关于为生产预编译资产时,没有方法错误,[ ] 未定义 nil 类的主要内容,如果未能解决你的问题,请参考以下文章

宝石更新后:测试失败,“资产未声明为在生产中预编译”

Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?

预编译时的 Sass 未定义变量

未检测到 Rails 预编译资产 Yarn 可执行文件

资产预编译错误

资产预编译期间未找到文件错误