web-dev-qa-db-fra.com

Définition des variables d'environnement dans Rails 3 (Devise + Omniauth)

J'ai essayé de comprendre comment Ryan Bates, dans son screencast d'authentification Facebook , définit les variables d'environnement "FACEBOOK_APP_ID" et "FACEBOOK_SECRET" suivantes.

provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']

Il y a des questions similaires, mais aucune réponse sur laquelle j'ai pu travailler Rails 3.2.1.

MISE À JOUR:

Depuis mai 2013, ma façon préférée de gérer les variables ENV est via le Figaro gem

53
neon

Vous pouvez jeter un oeil à les commentaires :

Vous pouvez soit définir des variables d'environnement directement sur le Shell où vous démarrez votre serveur:

FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef Rails server

Ou (plutôt hacky), vous pouvez les mettre dans votre config/environments/development.rb:

ENV['FACEBOOK_APP_ID'] = "12345";
ENV['FACEBOOK_SECRET'] = "abcdef";

Une voie alternative

Mais je ne ferais ni l'un ni l'autre. Je créerais un fichier de configuration (disons config/facebook.yml) qui contient les valeurs correspondantes pour chaque environnement. Et puis chargez ceci comme une constante dans un initialiseur:

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]

Remplacez ensuite ENV['FACEBOOK_APP_ID'] dans votre code par FACEBOOK_CONFIG['app_id'] et ENV['FACEBOOK_SECRET'] par FACEBOOK_CONFIG['secret'].

118
iblue

Il existe plusieurs options:

  • Définissez les variables d'environnement à partir de la ligne de commande:

    export FACEBOOK_APP_ID=your_app_id
    export FACEBOOK_SECRET=your_secret
    

    Vous pouvez mettre les lignes ci-dessus dans votre ~/.bashrc

  • Définissez les variables d'environnement lors de l'exécution de Rails s:

    FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret Rails s
    
  • Créer un .env fichier avec:

    FACEBOOK_APP_ID=your_app_id
    FACEBOOK_SECRET=your_secret
    

    et utilisez soit Foreman (démarrage de votre application avec foreman start) ou dotenv gem.

29
Stefan

Voici une autre idée. Définissez les clés et les valeurs dans provider.yml fichier, comme suggéré ci-dessus. Mettez ensuite ceci dans votre environment.rb (avant l'appel à Application.initialize!):

YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }

Ensuite, ces variables d'environnement peuvent être référencées dans l'initialiseur omniauth sans aucune dépendance d'ordre entre les initialiseurs.

12
Jan Hettich