Ruby on rails 4 Application.rb中Rails 4 hashWithInDifferenticatAccess中断Rake命令

Ruby on rails 4 Application.rb中Rails 4 hashWithInDifferenticatAccess中断Rake命令,ruby-on-rails-4,devise,rake,Ruby On Rails 4,Devise,Rake,将此代码添加到my Application.rb会破坏rake命令,并在重新加载rake任务时给出错误(如下)。我知道它可以找到“social_keys.yml”,因为如果我保留代码并运行rails应用程序,它会找到它并向facebook进行身份验证 social_keys = File.join(Rails.root, 'config', 'social_keys.yml') CONFIG = HashWithIndifferentAccess.new(YAML::load(IO.read(s

将此代码添加到my Application.rb会破坏rake命令,并在重新加载rake任务时给出错误(如下)。我知道它可以找到“social_keys.yml”,因为如果我保留代码并运行rails应用程序,它会找到它并向facebook进行身份验证

social_keys = File.join(Rails.root, 'config', 'social_keys.yml')
CONFIG = HashWithIndifferentAccess.new(YAML::load(IO.read(social_keys)))[Rails.env]
CONFIG.each do |k,v|
  ENV[k.upcase] ||= v
end
错误:

Error:[rake --tasks] rake aborted!
NoMethodError: undefined method `each' for nil:NilClass
/Users/cj/RubymineProjects/MyApp/config/application.rb:26:in `<class:Application>'
/Users/cj/RubymineProjects/MyApp/config/application.rb:10:in `<module:MyApp>'

如果这个方法不是最好的,有没有其他方法可以将我的社交密钥作为环境变量输入

我假设您在
social_keys.yml
中的信息没有正确嵌套在rails env键下

如果你这样做

puts YAML::load(File.read(social_keys))
puts YAML::load(File.read(social_keys))[Rails.env]
后者应该是空的

puts YAML::load(File.read(social_keys))
puts YAML::load(File.read(social_keys))[Rails.env]