2010-12-02 46 views
7

J'ai créé quelques différents "environnements" pour mon application hébergée sur heroku, donc j'ai: appName-staging.heroku.com appName-production.heroku .comcomment utiliser les clés google api basé sur le nom de l'application heroku

Je souhaite utiliser différentes clés API Google pour ces applications, comment faire? j'ai créé un fichier google.yml qui ressemble à:

développement

: api_key: production 'ABCXYZ'

: api_key: 'DEFXYZ'

donc j'utiliser ABCSZY lors du développement local, et DEFXYZ pour appName-production.heroku.com question, comment puis-je obtenir appName-staging.heroku.com pour utiliser une clé différente?

étant donné que chaque application déployée sur Heroku est considérée comme étant en "production", les deux appName-staging.heroku.com et appName-production.heroku.com utilisent la même clé.

Répondre

5

Vous pouvez ajouter un heroku config variable à chaque environnement, ce qui vous permet d'identifier chacun d'eux depuis l'application.

Quelque chose le long des lignes de:

$ heroku config:add APP_NAME_ENV=production --app appName-production 
$ heroku config:add APP_NAME_ENV=staging --app appName-staging 

Ensuite, vous pouvez saisir l'environnement actuel à partir de votre application en utilisant:

ENV['APP_NAME_ENV'] 

Et si vous avez votre fichier YAML comme un hachage appelé quelque chose comme GOOGLE_KEYS, ce qui suit retournerait la clé correcte pour un environnement donné:

GOOGLE_KEYS[ENV['APP_NAME_ENV']] 
+0

grâce theTRON, fonctionne très bien! – Varun

0

La réponse précédente fonctionne définitivement mais ne tient pas compte des menaces de sécurité potentielles qui accompagnent la vérification des fichiers incluant des clés privées dans le contrôle de source. Avoir votre fichier google.yml dans le contrôle de la source permettra à toute personne ayant accès à votre repo de voir vos clés API privées.

Une solution plus sûre serait de supprimer le fichier google.yml et créer différentes variables d'environnement sur vos serveurs de stockage intermédiaire et de production avec la même clé:

$ heroku config:add GOOGLE_API_KEY=<production key> --app appName-production 
$ heroku config:add GOOGLE_API_KEY=<development key> --app appName-staging 

Ensuite, lorsque cela est nécessaire, vous pouvez vous référer à il dans le code via

ENV['GOOGLE_API_KEY'] 

Cela vous permettra de partager du code sans partager vos clés API privées.

Quelques informations sur l'utilisation de variables d'environnement sur Heroku se trouve à https://devcenter.heroku.com/articles/config-vars