You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby升级至3.1.3、Rails升级至6.0.6后出现ActiveRecord常量未初始化错误

问题解决:Ruby 3.1.3 + Rails 6.0.6 运行RSpec报错

错误核心信息

运行bundle exec rspec spec时触发NameError: uninitialized constant ActiveRecord::Railtie::ActiveRecord,根源是加载ActiveRecord::Railties::ControllerRuntime时找不到ActiveRecord常量。

解决步骤

  • 清理Bootsnap缓存
    升级后缓存可能残留旧版本代码,执行命令清理:

    bundle exec rails tmp:clear
    

    或手动删除项目根目录下的tmp/cache文件夹。

  • 更新RSpec依赖版本
    Rails 6.0.x需搭配兼容的rspec-rails版本,在Gemfile中指定:

    gem 'rspec-rails', '~> 4.0'
    

    执行bundle update rspec-rails完成更新。

  • 重新安装所有Gem依赖
    删除Gemfile.lock文件,重新执行:

    bundle install
    

    确保所有gem版本与Rails 6.0.6、Ruby 3.1.3完全适配。

  • 检查Zeitwerk加载配置
    Rails 6默认使用Zeitwerk作为自动加载器,检查config/application.rb:

    • 确认未手动禁用Zeitwerk(无config.autoloader = :classic设置)
    • 自定义的autoload_paths/eager_load_paths不要与Zeitwerk规则冲突,避免手动加载已被Zeitwerk管理的文件。
  • 修复Logger弃用警告
    开头的弃用提示(Logger无需直接调用#after_initialize)虽非报错直接原因,但建议修复:
    打开config/application.rb第53行,移除after_initialize中直接初始化Logger的代码,改为在config/initializers/目录下创建单独初始化文件配置Logger。

  • 验证测试环境配置
    确认config/environments/test.rb未意外禁用ActiveRecord,确保配置包含ActiveRecord相关设置(例如config.active_record.dump_schema_after_migration = false,可根据项目需求调整)。

内容的提问来源于stack exchange,提问作者genonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:55:32