Установка переменных окружения в Rails 3 (Devise + Omniauth)
Я пытался выяснить, как Райан Бейтс, в его Facebook Authentication screencast, устанавливает следующие переменные среды" FACEBOOK_APP_ID "и" FACEBOOK_SECRET".
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
есть похожие-иш вопросы вокруг, но нет ответов, которые я был в состоянии получить, чтобы работать на рельсах 3.2.1.
обновление:
по состоянию на май 2013 года, мой предпочтительный способ обработки переменных ENV-через Фигаро
3 ответов:
вы могли бы взглянуть на комментарии:
вы можете либо установить переменные среды непосредственно в оболочке, где вы запускаете свой сервер:
FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails serverили (скорее hacky), вы можете установить их в свой
config/environments/development.rb:ENV['FACEBOOK_APP_ID'] = "12345"; ENV['FACEBOOK_SECRET'] = "abcdef";альтернативный способ
однако я бы не сделал ни того, ни другого. Я бы создал конфигурационный файл (скажем
config/facebook.yml), который содержит соответствующие значения для каждой среды. И тогда нагрузку в этом константа в инициализаторе:
config/facebook.ymldevelopment: app_id: 12345 secret: abcdef test: app_id: 12345 secret: abcdef production: app_id: 23456 secret: bcdefg
config/initializers/facebook.rbFACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env]затем заменить
ENV['FACEBOOK_APP_ID']в кодеFACEBOOK_CONFIG['app_id']иENV['FACEBOOK_SECRET']byFACEBOOK_CONFIG['secret'].
есть несколько вариантов:
настройки переменных среды из командной строки:
export FACEBOOK_APP_ID=your_app_id export FACEBOOK_SECRET=your_secretвы можете поместить эти строки в свой
~/.bashrcустановите переменные среды при запуске
rails s:FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret rails sсоздать
.envфайл:FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secretи использовать старшина (запуск приложения с помощью
foreman start) или dotenv камень.
вот еще одна идея. Определите ключи и значения в
provider.ymlфайл, как было предложено выше. Тогда положите это в свойenvironment.rb(перед вызовомApplication.initialize!):YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }тогда на эти переменные среды можно ссылаться в
omniauthинициализатор без какой-либо зависимости порядка среди инициализаторов.
Comments