Heroku黑客指南(四)

环境变量

(一)最佳实践

12 factor app最佳实践的第三条是配置。如下引自该文档:

应用的配置是指在部署的不同阶段(开发阶段、产品阶段等)变化的各种因素。它包括:

  • 资源句柄,例如访问数据库、memcache和其他后台服务的连接信息
  • 访问外部服务的信用信息,例如Amazon S3或Twitter API
  • 发布时的相关参数例如部署主机名

为了维护灵活的、简单的、可重用的代码,你应该严格执行代码和配置分离。这意味着避免在代码里对配置进行硬编码。heroku提供了一个简单的config命令,允许你在所有dyno里实时增加、编辑、删除环境变量。

(二)config命令

假如你在heroku有个web应用依赖于一个GitHub API密钥。可以使用heroku config命令来存储API密钥到环境变量里,而不是把它写死在程序里。进入项目根目录,执行:

$ heroku config:set GITHUB_API_KEY=blah
Setting config vars and restarting myproject... done, v21
GITHUB_API_KEY: blah

$ heroku config
=== myproject Config Vars
...
GITHUB_API_KEY: blah

如上,运行heroku config:set GITHUB_API_KEY=blah命令,告诉heroku设置新的环境变量GITHUB_API_KEY,然后自动重启dyno应用这个环境变量。

在程序代码里,可以通过环境变量访问到GITHUB_API_KEY的值。以python代码为例,演示如下:

# test.py
from os import environ
print environ.get(’GITHUB_API_KEY’)

当然,你也可以运行heroku config:unset命令来移除环境变量。

$ heroku config:unset GITHUB_API_KEY
Unsetting GITHUB_API_KEY and restarting myproject.. done, v22

(三)好处

除了方便外,heroku的环境变量还有其他好处。

第一,heroku内部保持一份应用发布记录,每次你发布代码到heroku,会分配一个唯一的部署版本号(例如v1, v2等),它不仅存储了当前运行的代码版本,还存储了当前设置的环境变量。你可以比较容易的知道过去某个版本的环境变量值,因为heroku通过有效的版本控制记录了它们。

第二,使用环境变量允许你快速隔离有问题的应用组件。通常应用依赖于许多服务(数据库、缓存服务等),它们大多通过URL路径访问。通过设置环境变量来变更它们,无疑十分灵活。例如,你的应用访问PostgreSQL数据库,在环境变量里设置了一个URL路径:postgres://user:password@host:port/db。假如该数据库有问题,那么更新环境变量值即可。应用将立刻使用新的数据库服务器,而不用变更代码。

总之,不管你开发何种应用,总是将配置信息存储在环境变量里,让应用管理和维护更简单。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。