升级Ruby与Bundler后出现undefined method `present?' for nil:NilClass错误
解答
根因说明
虽然你没有引入完整的Rails框架,但两个版本的依赖中都包含了activesupport包,这个包是Rails生态里负责提供核心扩展的组件,blank?、present?正是它提供的方法。
旧版的activesupport 4.2.5默认会自动加载所有核心扩展,所以你之前不需要额外配置就能直接调用这两个方法。而升级到activesupport 6.1.3.2后,官方做了拆分优化,默认不再自动加载全量扩展,需要你主动引入需要的模块才会加载对应的方法。
修复方法
找到你应用的入口文件(Sinatra应用通常是app.rb或者config.ru文件),在文件顶部添加一行代码即可:
require 'active_support/core_ext/object/blank'
这行代码只会加载和blank?、present?相关的扩展,不会引入冗余内容,不会增加应用负担。
后续注意事项
如果你代码里还用到了其他非Ruby原生的扩展方法(比如时间、字符串处理相关的工具方法),大概率也是ActiveSupport提供的,遇到类似的报错时,按需引入对应的core_ext下的模块即可。
内容的提问来源于stack exchange,提问作者James Courtney
相关产品推荐
相关产品推荐

