升级Ruby/Rails/Devise/ActiveAdmin后遇Devise::SessionsController未初始化错误
修复Rails 7 + ActiveAdmin 2.13升级后
uninitialized constant Devise::SessionsController错误 升级到Ruby 3.2.1、Rails 7.0、Devise 4.9.2和ActiveAdmin 2.13后出现该错误,核心原因是ActiveAdmin初始化时,Devise的SessionsController还未被Zeitwerk自动加载完成,导致常量无法找到。以下是几个简便修复方案:
方案一:强制提前加载Devise
在config/initializers/active_admin.rb的最顶部添加代码,强制在ActiveAdmin初始化前加载Devise核心模块,确保常量提前定义:
require 'devise/rails'
方案二:显式指定Devise控制器
在ActiveAdmin配置块中明确指定会话控制器路径,避免依赖自动加载顺序:
ActiveAdmin.setup do |config| # 保留原有其他配置... # 显式指定默认Devise会话控制器 config.devise_controller = 'Devise::SessionsController' # 若使用自定义Admin用户会话控制器,替换为自己的路径,例如: # config.devise_controller = 'Admin::SessionsController' end
方案三:临时启用预加载(不推荐长期使用)
在开发环境配置文件config/environments/development.rb中开启预加载,让所有常量在启动时加载完成:
config.eager_load = true
此方法会延长应用启动时间,仅适合临时调试,不建议作为长期解决方案。
内容的提问来源于stack exchange,提问作者amjad ahmad
相关产品推荐
相关产品推荐

