我正在开发一个支持许多不同数据库连接的旧代码库。我正在尝试创建一个新环境,因此我可以打开一个rails console
,其中包含我需要用于我正在处理的应用程序部分的特定数据库的连接。环境名称为nhl_development
。
到目前为止,我已经创建了一个新的配置文件并添加了相关的数据库配置:
# database.yml
generic: &generic
adapter: postgresql
encoding: utf8
pool: 30
dev_default: &dev_default
<<: *generic
host: <%= ENV['FOO']%>
username: <%= ENV['BAR']%>
password: <%= ENV['BAZ']%>
pool: 30
nhl_development:
<<: *dev_default
database: nhl
# config/environments/nhl_development.rb
Stats::Application.configure do
# copied entirely from config/environments/development.rb
end
当我从命令行运行rails c nhl_development
时,我从AWS-SDK
gem中收到以下错误:
/usr/local/rvm/gems/ruby-2.2.1/gems/aws-sdk-v1-1.60.2/lib/aws/rails.rb:110:in `load_yaml_config': config/aws.yml is missing a section for `nhl_development` (RuntimeError)
...
...
from /home/me/app/config/environment.rb:5:in `<top (required)>'
我理解此错误消息的基本点。当我打开config/aws.yml
时,nhl_development
没有配置。但是,我不明白的是:
AWS::Rails.load_yaml_config
在哪里被召唤?我不认为我甚至希望/需要AWS在此环境中加载配置。堆栈跟踪返回config/environment.rb:5
,但这只是初始化Rails应用程序的行。 config/initializers
中没有适用于AWS的初始化程序,我已为.load_yaml_config
完成了项目查找,但没有结果。我可以通过在config/aws.yml
中为此环境添加一部分配置来完成所有工作,但此时我还没有加载任何AWS配置。如何防止AWS::Rails.load_yaml_config
在此环境中被调用,以便我现在不必混淆config/aws.yml
?
答案 0 :(得分:1)
宝石本身就是这样做的。如果需要(如果它在你的Gemfile中,它将执行哪些捆绑),它会加载this file,它会注册一个初始化程序(除其他外)调用load_yaml_config
。
你可以想象通过调整你的Gemfile中的那个gem(require: false
)的autorequire并确保在初始化程序运行之前没有通过任何其他方式加载gem来解决这个问题,但这听起来有点hacky 。我认为最简单的方法就是在该yaml文件中添加一个条目