53 votes

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

J'ai été à essayer de comprendre comment Ryan Bates, dans son Facebook Authentification screencast, est à la suite de "FACEBOOK_APP_ID" et "FACEBOOK_SECRET" variables d'environnement.

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

Il y a des similaires-ish questions, mais pas de réponses que j'ai pu apprendre à travailler sur des Rails 3.2.1.

Mise à JOUR:

En Mai 2013, ma manière préférée de manipuler des variables d'environnement est via le Figaro gem

118voto

iblue Points 10472

Vous pouvez prendre un coup d'oeil sur les commentaires:

Vous pouvez définir des variables d'environnement directement sur la coquille où vous êtes à partir de 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 autre façon

Cependant, je le ferais pas non plus. Je voudrais créer un fichier de configuration (disons config/facebook.yml) qui détient les valeurs correspondantes pour chaque environnement. Et puis le charger 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]

Puis remplacez ENV['FACEBOOK_APP_ID'] dans votre code en FACEBOOK_CONFIG['app_id'] et ENV['FACEBOOK_SECRET'] par FACEBOOK_CONFIG['secret'].

29voto

Stefan Points 23363

Il y a plusieurs options:

  • Définir 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éfinir les variables d'environnement lors de l'exécution d' rails s:

    FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret rails s
    
  • Créer un .env le fichier:

    FACEBOOK_APP_ID=your_app_id
    FACEBOOK_SECRET=your_secret
    

    et utiliser Contremaître (à partir de votre application avec foreman start) ou la dotenv gem.

12voto

Jan Hettich Points 1504

Voici une autre idée. Définissez les clés et les valeurs dans le fichier provider.yml , comme suggéré ci-dessus. Puis mettez 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 parmi les intialiseurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X