как использовать ключи Google api на основе имени приложения heroku

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

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

развитие: api_key:'ABCXYZ'

производство: api_key:'DEFXYZ'

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

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

2 ответов


вы можете добавить переменная конфигурации 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']]

предыдущий ответ определенно работает, но не учитывает потенциальные угрозы безопасности, которые приходят с проверкой файлов, которые включают закрытые ключи в систему управления версиями. Имея свой 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