Как использовать значения YML в конфигурации/инициализаторе

Я работаю над интеграцией facebook в свое приложение. Для этого я использую koala, devise и 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 жили только в одном месте, а один файл ссылался на другой?


person AnApprentice    schedule 06.05.2011    source источник


Ответы (2)


Для этого есть отличный 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
person Dylan Markow    schedule 06.05.2011
comment
Помог мне с аналогичным вопросом о конфигурации S3, stackoverflow.com/questions/6305523/, спасибо! - person Max Williams; 10.06.2011

В дополнение к приведенному выше ответу вам может потребоваться использовать немного другой код для загрузки файла:

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