2011-05-06 63 views
8

我正在努力將facebook集成到我的應用程序中。爲此,我使用考拉,設計和omniauth。如何在配置/初始化程序中使用YML值

考拉,我有

/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只存在於一個地方,一個文件引用另一個地方?

回答

9

上有這樣一個偉大的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 
+0

幫我一個關於S3配置的類似問題,http://stackoverflow.com/questions/6305523/rails3-how-to-get-at-aws-s3s-yml-config-data-in-the-the- app/6306039#6306039,謝謝! – 2011-06-10 12:00:31

3

除以上答案您可能需要使用稍微不同的代碼來加載文件:

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