将此代码添加到我的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>'
以下是完整的代码和错误: https://gist.github.com/cdesch/11191336
我正在使用example application中的代码段代码。我怀疑它与HashWithIndifferentAccess Issue或similar reference to HashWithIndifferentAccess有什么关系,虽然我对红宝石不够好,不知道它们是否相关。从错误消息中我可以收集到迭代哈希的问题。
如何修复此代码以使其工作或重写以执行相同的功能?代码应加载'social_keys.yml'作为环境变量,以便在Devise初始化期间使用。
像这样:
config.omniauth :facebook, ENV["FACEBOOK_KEY"], ENV["FACEBOOK_SECRET"], { :scope => 'email, offline_access', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
如果这种方法不是最好的,是否有不同的方式将我的社交密钥作为环境变量?
答案 0 :(得分:0)
我认为social_keys.yml
中的信息未正确嵌套在rails-env键下。
如果你这样做
puts YAML::load(File.read(social_keys))
puts YAML::load(File.read(social_keys))[Rails.env]
后者应该是空的。