как использовать ключи Google API на основе имени приложения heroku - PullRequest
7 голосов
/ 02 декабря 2010

Я создал несколько различных «сред» для своего приложения, которое размещено на heroku, поэтому у меня есть: appName-staging.heroku.com appName-production.heroku.com

Я хочу использовать разныеключи Google API для этих приложений, как мне это сделать?Я создал файл google.yml, который выглядит следующим образом:

development: api_key: 'ABCXYZ'

production: api_key: 'DEFXYZ'

, поэтому я использую ABCSZY, когдалокальная разработка и DEFXYZ для appName-production.heroku.com. Вопрос в том, как заставить appName-staging.heroku.com использовать другой ключ?

, поскольку каждое приложение, развернутое в Heroku, считается работающим, и appName-staging.heroku.com, и appName-production.heroku.com используют один и тот же ключ.

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Вы можете добавить конфигурационную переменную heroku в каждую среду, позволяя идентифицировать каждую из них в приложении.

Что-то вроде:

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

Затем вы можете получить текущую среду из своего приложения, используя:

ENV['APP_NAME_ENV']

И если вы получили YAML-файл в виде хэша, называемого как GOOGLE_KEYS, следующий код вернет правильный ключдля данной среды:

GOOGLE_KEYS[ENV['APP_NAME_ENV']]
0 голосов
/ 06 ноября 2015

Предыдущий ответ определенно работает, но не учитывает потенциальные угрозы безопасности, связанные с проверкой файлов, которые включают закрытые ключи в систему контроля версий. Наличие вашего файла google.yml в системе контроля версий позволит любому, имеющему доступ к вашему репозиторию, увидеть ваши закрытые ключи API.

Более безопасное решение - удалить файл google.yml и создать разные переменные среды на промежуточном и рабочем серверах с одним и тем же ключом:

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

Затем, когда это необходимо, вы можете обратиться к нему в коде через

ENV['GOOGLE_API_KEY']

Это позволит вам обмениваться кодом без обмена вашими личными ключами API.

Дополнительную информацию об использовании переменных среды в Heroku можно найти по адресу https://devcenter.heroku.com/articles/config-vars

...