设置Heroku环境变量而不重新启动应用程序

时间:2016-01-12 08:21:10

标签: node.js git heroku environment-variables

是否可以设置Heroku环境变量而不重新启动应用程序?

我的应用通过OAuth2连接到不同的在线服务。对于我连接的每个服务,我需要设置OAuth2 ID和密码。要将这些配置变量保留在我的代码之外,我正在使用环境变量,并在process.env(node.js)上读取它们。

每次我向我的应用添加新服务时,我都需要为ID和机密添加相应的环境变量。我需要在推送最新代码之前执行此操作,以便当应用程序下次启动新服务连接时,OAuth2 ID和秘密变量可用。

目前我的工作流程如下:

  1. 使用Heroku工具栏设置环境变量:heroku config:set <SERVICE>_ID=foo <SERVICE>_SECRET=bar
  2. 推送最新代码:git push heroku master
  3. 目前,这两项操作都将重启应用。我真的更喜欢第一个操作不重启应用程序,因为这些配置变量的更改不需要在步骤2)之前生效。通过在步骤1)重新启动,我的应用程序将遇到不必要的停机时间。

    那么,有没有办法阻止步骤1)重新启动应用程序?

2 个答案:

答案 0 :(得分:10)

根据this article,它明确指出

  

每当您设置或删除配置变量时,您的应用都将重新启动。

我个人也希望有办法做你要问的事。在较大的应用程序上,当您运行许多进程类型时,系统范围的硬重启可能会很痛苦。很多时候我设置的环境变量对应用程序来说并不是至关重要的,例如涉及未来功能的环境变量,或者具有旧值但是希望新值在滚动中生效的设置-restart时尚。

答案 1 :(得分:0)

目前无法避免应用重启。但是您可以使用命令 heroku config:edit 立即编辑您的环境,甚至粘贴新的环境集,避免多次重启。

根据heroku config help:

(...)

COMMANDS
  config:edit   interactively edit config vars
  config:get    display a single config value for an app
  config:set    set one or more config vars
  config:unset  unset one or more config vars

所以你可以运行

heroku config:edit

另外,你可能想看看这个问题(提案): https://github.com/heroku/cli/issues/1570