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
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";
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']
.
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.
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.