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

Rails 6升级至Rails 7时Rails Admin与Zeitwerk初始化报错问题

Rails 7升级中Rails Admin的Zeitwerk加载问题解决方案

问题根源

Rails 7默认使用Zeitwerk作为常量加载器,它采用按需自动加载机制,和Rails 6的旧autoload机制逻辑不同。你手动在初始化文件里require Rails Admin的控制器文件,会打乱Zeitwerk的加载顺序,导致依赖的常量(比如RailsAdmin::ApplicationController或你的应用ApplicationController)未被正确加载。

具体解决步骤

  1. 移除手动require语句
    删除初始化文件initializer/rails_admin.rb中的require 'rails_admin/main_controller'或require 'rails_admin/application_controller',Zeitwerk会自动在需要时加载这些常量,无需手动引入。

  2. 自定义Rails Admin控制器的正确方式
    如果需要修改RailsAdmin::MainController,不要在初始化文件里操作,而是在app/controllers/rails_admin/目录下创建对应的文件:

    # app/controllers/rails_admin/main_controller.rb
    module RailsAdmin
      class MainController < RailsAdmin::ApplicationController
        # 在这里添加你的自定义逻辑,比如before_action、自定义方法等
      end
    end
    

    Zeitwerk会自动识别并加载这个文件,确保依赖关系正确。

  3. 初始化阶段访问Rails Admin常量的处理
    如果必须在初始化阶段访问Rails Admin的常量,用after_initialize钩子包裹代码,确保Rails和Zeitwerk完成所有加载工作后再执行:

    # initializer/rails_admin.rb
    Rails.application.config.after_initialize do
      # 这里可以安全调用RailsAdmin::MainController等常量
    end
    
  4. 确认Rails Admin版本兼容性
    你使用的Rails Admin 3.0.0已经完全适配Rails 7和Zeitwerk,确保Gemfile中指定的版本正确,并且执行过bundle install更新依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:52:09