Установка переменных окружения в 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-через Фигаро

586   3  

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.yml

development:
  app_id: 12345
  secret: abcdef

test:
  app_id: 12345
  secret: abcdef

production:
  app_id: 23456
  secret: bcdefg

config/initializers/facebook.rb

FACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env]

затем заменить ENV['FACEBOOK_APP_ID'] в коде FACEBOOK_CONFIG['app_id'] и ENV['FACEBOOK_SECRET'] by FACEBOOK_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

    Ничего не найдено.