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

Rails引擎运行ActiveAdmin/Devise生成器报configuration_hash未定义错误

问题分析

错误undefined method 'configuration_hash' for nil:NilClass的核心原因是:Devise 4.9.0的生成器在Rails 7环境下,尝试通过configs_for(env_name: Rails.env, name: "primary")获取数据库配置,但你的database.yml采用传统格式,未显式指定数据库连接的name: primary,导致configs_for返回nil。

另外,Rails引擎默认不会自动继承主应用的数据库配置上下文,即便你把database.yml复制到引擎目录,也需要确保配置格式符合Rails 7的解析要求。

解决方案

方案1:修改引擎的database.yml格式

给每个环境的配置添加name: primary,让configs_for能正确匹配到连接配置:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  name: primary # 新增该行

development:
  <<: *default
  database: db_name_development

test:
  <<: *default
  database: db_name_test

production:
  <<: *default
  database: db_name_production
  username: db_name
  password: <%= ENV["DATABASE_PASSWORD"] %>

staging:
  <<: *default
  database: db_name_staging
  username: db_name
  password: <%= ENV["DATABASE_PASSWORD"] %>

修改后重新运行生成器命令:

engine_name/bin/rails g active_admin:install

方案2:在主应用中执行生成器,迁移文件到引擎

由于引擎依赖主应用的数据库,更合理的做法是在主应用中完成ActiveAdmin初始化,再将相关文件迁移到引擎:

  1. 在主应用根目录运行:
rails g active_admin:install
  1. 将生成的db/migrate/xxx_devise_create_admin_users.rb迁移文件复制到引擎的db/migrate目录
  2. 将app/admin/目录复制到引擎的app/目录
  3. 将config/initializers/active_admin.rb(及新增的devise.rb)复制到引擎的config/initializers目录
  4. 在引擎的lib/engine_name/engine.rb中确保加载初始化文件:
module EngineName
  class Engine < ::Rails::Engine
    isolate_namespace EngineName
    initializer "engine_name.load_initializers" do
      config.paths["config/initializers"].each do |path|
        Dir[File.join(path, "*.rb")].sort.each { |f| require f }
      end
    end
  end
end

方案3:手动创建必要文件绕过检测

如果只是想快速完成安装,可直接手动创建AdminUser模型和迁移文件,跳过生成器的数据库检测步骤:

  1. 在引擎的app/models目录创建admin_user.rb:
class AdminUser < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end
  1. 在引擎的db/migrate目录创建迁移文件,内容参考Devise生成的迁移模板,手动指定字段类型(比如inet对应PostgreSQL的IP字段)。
补充说明

Rails 7开始推荐带命名连接(primary、replica等)的新数据库配置格式,传统格式虽兼容,但部分gem的生成器会依赖新的配置结构。引擎作为独立模块,运行生成器时的上下文是孤立的,必须确保自身配置能被正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:37:02