如何在配置/初始化程序中使用YML值

我正在努力将facebook整合到我的应用中。 要做到这一点,我正在使用考拉,设计和omniauth。

对于考拉,我有

/config/facebook.yml development: app_id: 123123132123 secret_key: dasadsasd1231231 test: app_id: 313131313 secret_key: das132asdads12132 production: app_id: dasdsadsadsadsa secret_key: adsdsa12das123fds21 

然后我也有了omniauth:

 /config/initalizers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, 123123132123, 'dasadsasd1231231' end 

这里的问题是我在两个位置都重复了相同的值。 我该如何干这个,以便app_id和secret_key只存在于一个地方,一个文件引用另一个?

这样做有一个很棒的Railscast: http ://railscasts.com/episodes/85-yaml-configuration-file

omniauth.rb ,您可以添加以下行:

 FACEBOOK_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/facebook.yml")[RAILS_ENV] 

然后你可以这样做:

 Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, FACEBOOK_CONFIG['app_id'], FACEBOOK_CONFIG['secret_key'] end 

除了上面的答案,您可能需要使用稍微不同的代码来加载文件:

 FACEBOOK_CONFIG = YAML.load_file(Rails.root.join("config","facebook.yml"))[Rails.env]