如何防止AWS-SDK gem尝试运行.load_yaml_config?

时间:2015-10-06 01:14:44

标签: ruby-on-rails ruby amazon-web-services initialization aws-sdk

我正在开发一个支持许多不同数据库连接的旧代码库。我正在尝试创建一个新环境,因此我可以打开一个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

1 个答案:

答案 0 :(得分:1)

宝石本身就是这样做的。如果需要(如果它在你的Gemfile中,它将执行哪些捆绑),它会加载this file,它会注册一个初始化程序(除其他外)调用load_yaml_config

你可以想象通过调整你的Gemfile中的那个gem(require: false)的autorequire并确保在初始化程序运行之前没有通过任何其他方式加载gem来解决这个问题,但这听起来有点hacky 。我认为最简单的方法就是在该yaml文件中添加一个条目