Ruby2.4.3升级3.0.2后启动Rails控制台报add_modifier参数错误如何解决
问题原因及解决方案
根因分析
你当前使用的Rails 5.0.2版本不兼容Ruby 3.0.2,Ruby 3.0对关键字参数的传递规则做了不兼容变更,而Rails 5.0.x系列没有针对该变更做适配,就会触发本次的参数数量不匹配错误。
同时你Gemfile中还保留了ruby '~>2.4.1'的声明,仅注释了3.0.2的版本声明,也存在版本声明和实际使用版本不匹配的问题。
解决方案
方案1:降级Ruby版本(改动手风险更低)
- 回退Ruby版本到2.4.x或者2.5.x(Rails 5.0.x最高兼容到Ruby 2.5.x)
- 恢复Gemfile中的ruby版本声明为
ruby '~>2.4.1',删除3.0.2的注释声明 - 执行
bundle install重新安装依赖后重启服务即可
方案2:升级Rails版本适配Ruby 3.0
- 修改Gemfile中的Rails版本声明,建议升级到Rails 6.1.x及以上版本,只有Rails 6.1之后的版本才官方支持Ruby 3.0
- 同步修改Gemfile中的ruby版本声明为
ruby '~>3.0.2' - 执行
bundle update rails升级Rails及相关依赖 - 升级完成后修复项目中存在的版本不兼容代码,再启动服务即可
临时补丁方案(仅用于临时测试,不推荐生产环境使用)
你可以在Rails项目的config/initializers目录下新建一个active_record_ruby3_patch.rb文件,加入以下补丁代码适配参数传递:
module ActiveRecord module Type class AdapterSpecificRegistry < ActiveModel::Type::Registry def add_modifier(options, klass, *args, **kwargs) registrations << DecorationRegistration.new(options, klass, *args, **kwargs) end end end end
添加补丁后重启Rails控制台即可临时解决报错。
内容的提问来源于stack exchange,提问作者Chloe
相关产品推荐
相关产品推荐

