【发布时间】:2016-04-16 18:29:25
【问题描述】:
是否可以在不重启应用的情况下设置 Heroku 环境变量?
我的应用通过 OAuth2 连接到不同的在线服务。对于我连接的每个服务,我需要设置一个 OAuth2 ID 和密码。为了将这些配置变量保留在我的代码之外,我使用了环境变量,并在 process.env (node.js) 上读取它们。
每次向我的应用添加新服务时,我都需要为 ID 和 secret 添加相应的环境变量。我需要在推送最新代码之前执行此操作,这样当应用下次使用新服务连接启动时,OAuth2 ID 和机密变量都可用。
目前我的工作流程如下:
- 使用 Heroku 工具带设置环境变量:
heroku config:set <SERVICE>_ID=foo <SERVICE>_SECRET=bar - 推送最新代码:
git push heroku master
目前,这两个操作都会重启应用。我真的希望第一次操作不要重新启动应用程序,因为对这些配置变量的更改不需要在步骤 2 之前生效)。通过在步骤 1) 重新启动,我的应用将经历不必要的停机时间。
那么,有什么办法可以防止第 1 步)重启应用?
【问题讨论】:
-
您不能更改正在运行的进程的环境变量。您只能从应用程序内操作它。但是,如果您需要在应用程序已经运行时更改环境变量,那么您无论如何都做错了。
-
感谢您的评论,但如果您注意到,我实际上是在添加一个环境变量,而不是更改现有的。所以我不认为这算作“做错事”?
-
您在应用程序运行后设置服务机密。对我来说,服务机密是应用程序运行时不应该更改的配置。
-
好的,很公平。然而,这是尚未部署的服务的服务机密。所以它不应该影响其他任何东西。我真正想要的是部署一项新服务并将该服务的环境变量设置为原子操作,即仅导致单个应用重启的操作。
标签: node.js git heroku environment-variables