Ruby on Rails 7.0.0 安装 Devise 报 NoMethodError 错误如何解决
问题根因
你遇到的报错是Devise 4.8.0及更早版本与Rails 7.0不兼容导致的:Rails 7.0移除了ActiveSupport::Dependencies模块下的reference方法,而旧版Devise还在调用这个已废弃的API,所以触发NoMethodError。
你反馈指定版本仍被自动更新,是因为Gemfile中没有设置严格的版本约束,或者执行安装时没有同步更新Gemfile.lock锁版本。
解决方案
操作步骤如下:
- 第一步:打开项目根目录的
Gemfile,找到devise的依赖行,修改为严格约束兼容Rails7的版本:
4.9.0及以上版本的Devise已经完整适配了Rails 7的API变更,不会再出现这个报错。gem 'devise', '~> 4.9', '>= 4.9.0' - 第二步:在项目根目录执行bundle命令锁定安装指定版本,不要使用单独的
gem install devise命令,避免和项目依赖版本冲突:bundle install - 第三步:如果之前已经生成过Devise的配置文件,执行下面的命令更新配置适配新版本即可:
出现文件冲突提示时输入rails generate devise:installn即可跳过覆盖你已经修改过的自定义配置。
如果执行完上述操作后依赖仍被锁定在4.8.0版本,直接删除旧的依赖锁文件再重新安装即可:
rm Gemfile.lock bundle install
内容的提问来源于stack exchange,提问作者Samuel Da Costa
相关产品推荐
相关产品推荐

