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

升级Rails 6.1至Rails 7时遭遇NameError: uninitialized constant错误求助

Rails 6.1升级到7执行bin/rails app:update时的NameError解决

问题场景

执行bin/rails app:update升级到Rails7时,出现如下错误:

Overwrite /my_app/bin/setup? (enter "h" for help) [Ynaqdhm] n
        skip  bin/setup
       rails  active_storage:update
rails aborted!
NameError: uninitialized constant Mappings

  include Mappings::Model
          ^^^^^^^^
/my_app/config/initializers/wrap_parameters.rb:17:in `block in <main>'
/my_app/config/initializers/wrap_parameters.rb:16:in `<main>'
/my_app/config/environment.rb:5:in `<main>'
Tasks: TOP => active_storage:update => environment

错误由config/initializers/wrap_parameters.rb中的这段代码触发:

ActiveSupport.on_load(:active_record) do
  include Mappings::Model
end

已尝试在wrap_parameters.rb顶部添加require语句,但问题未解决。

解决方案

  • 调整钩子执行时机:Rails7初始化流程有调整,ActiveSupport.on_load(:active_record)的执行时机可能早于Mappings模块加载时间,换成更晚触发的:active_record_base钩子:
    ActiveSupport.on_load(:active_record_base) do
      include Mappings::Model
    end
    
  • 确保模块正确加载:如果Mappings::Model是自定义模块,核对文件路径后用绝对路径require:
    require Rails.root.join('app/models/concerns/mappings/model')
    
    ActiveSupport.on_load(:active_record) do
      include Mappings::Model
    end
    
    注意替换成你实际的模块文件路径。
  • 适配Zeitwerk自动加载规则:Rails7默认使用Zeitwerk作为自动加载器,需保证模块名和文件目录、命名严格对应。比如Mappings::Model对应app/models/concerns/mappings/model.rb(目录和文件名均为小写),同时确认该目录在自动加载路径中:
    # config/application.rb
    config.autoload_paths << Rails.root.join('app/models/concerns')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:12:47