所以我在我的应用程序中创建一个单独的引擎来实现管理功能。我创建了引擎,并将 Devise 和 ActiveAdmin 添加为
.gemspec
内部的依赖项。
spec.add_dependency "rails", ">= 7.0.4.3"
spec.add_dependency "devise"
spec.add_dependency "activeadmin"
然后当我运行
engine_name/bin/rails g active_admin:install
时,我收到以下错误 undefined method 'configuration_hash' for nil:NilClass (NoMethodError)
。
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: "primary").configuration_hash
我相信它正在发生,因为它无法找到数据库配置,即使它是在主应用程序中定义的,并且我可以从主应用程序的模型访问数据。
我尝试将
database.yml
从主应用程序的配置复制/粘贴到引擎配置文件夹,但它不起作用。我是不是错过了什么?
这是完整的堆栈跟踪:
/home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:100:in `ar_config': undefined method `configuration_hash' for nil:NilClass (NoMethodError)
ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: "primary").configuration_hash
^^^^^^^^^^^^^^^^^^^
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:94:in `postgresql?'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:82:in `inet?'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:78:in `ip_column'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:60:in `migration_data'
from (erb):6:in `migration_template'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/erb.rb:429:in `eval'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/erb.rb:429:in `result'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/migration.rb:66:in `block in migration_template'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/actions/create_file.rb:53:in `render'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/actions/create_migration.rb:19:in `identical?'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/actions/create_migration.rb:50:in `on_conflict_behavior'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/actions/empty_directory.rb:115:in `invoke_with_conflict_check'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/actions/create_file.rb:60:in `invoke!'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/actions/create_migration.rb:25:in `invoke!'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/actions.rb:93:in `action'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/migration.rb:36:in `create_migration'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators/migration.rb:65:in `migration_template'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/devise-4.9.0/lib/generators/active_record/devise_generator.rb:20:in `copy_devise_migration'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `invoke_all'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:232:in `dispatch'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/activeadmin-3.0.0/lib/generators/active_admin/devise/devise_generator.rb:43:in `create_admin_user'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `block in invoke_all'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `each'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `map'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `invoke_all'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:232:in `dispatch'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:277:in `block in _invoke_for_class_method'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/shell.rb:68:in `with_padding'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:266:in `_invoke_for_class_method'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:134:in `_invoke_from_option_users'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `block in invoke_all'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `each'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `map'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `invoke_all'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/group.rb:232:in `dispatch'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/generators.rb:263:in `invoke'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/commands/generate/generate_command.rb:26:in `perform'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/command/base.rb:87:in `perform'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/command.rb:48:in `invoke'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/commands.rb:18:in `<top (required)>'
from <internal:/home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from <internal:/home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from /home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/railties-7.0.4.3/lib/rails/engine/commands.rb:9:in `<top (required)>'
from <internal:/home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from <internal:/home/luka/.asdf/installs/ruby/3.2.1/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from travel_admin/bin/rails:23:in `<main>'
这是主应用程序的
database.yml
文件夹和引擎的 config/
文件夹中的 config/
文件。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
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"] %>
在运行该命令时在同一控制台中检查您的
RAILS_ENV
:
echo $RAILS_ENV
我在当地查了一下
ActiveRecord::Base.configurations.configs_for(env_name: "foo", name: "primary").configuration_hash
给出了这个确切的错误。也许你还有剩下的
export RAILS_ENV=something-not-standard
在你的一些 rc 文件中? (.bashrc、.zshrc?)。