环境变量与配置
有些值是不能写进你的代码里的:密钥、数据库密码、某个服务的地址。还有一些值需要随着应用运行的地方而改变。你在笔记本上测试的代码(dev 环境)应该连到一个测试数据库;你的用户真正在用的那个线上应用(prod,即生产环境)必须连到真实的那个——而且用的是同一份代码。
答案就是环境变量(environment variables,常简称 "env vars"):一些有名字的值,它们住在代码之外,并在代码运行时被供给进去。代码说 "把 DATABASE_URL 给我",然后由环境来决定要交出哪一个。
# 一个配置文件(例如 .env)—— 值住在这里,而不是在代码里
DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H... # dev = 一个测试用的密钥
SEND_REAL_EMAILS=false # 测试时别给真实用户发邮件
有两条规则能帮你省掉实打实的痛苦:
- 密钥绝对不放进代码里。 你代码里的任何东西都可能最终变成公开的(尤其是在一个共享的代码仓库里),而泄露一个支付密钥或数据库密码是一场货真价实的紧急事件。密钥应该放在 env vars 里,并且不进入版本控制。
- dev 和 prod 是不一样的。 重点在于同一份代码在两者里都表现正确,因为是由环境——而不是代码——来决定用哪个数据库和哪些密钥。