如何在Heroku预览应用程序postdeploy脚本中设置环境变量

如何在Heroku预览应用程序postdeploy脚本中设置环境变量,heroku,environment-variables,Heroku,Environment Variables,我想在预览应用程序中将主机env var设置为$HEROKU\u APP\u NAME.herokuapps.com。看起来我无法在app.json中执行此操作,因为这是一个计算值 我希望用这样的“后期部署”脚本来完成 heroku config:set HOST="`heroku config:get HEROKU_APP_NAME -a neon-dev-pr-520`.herokuapps.com" 但它想认证我是Heroku用户。唉,这也不行: export HOST=$HEROKU_

我想在预览应用程序中将主机env var设置为$HEROKU\u APP\u NAME.herokuapps.com。看起来我无法在
app.json
中执行此操作,因为这是一个计算值

我希望用这样的“后期部署”脚本来完成

heroku config:set HOST="`heroku config:get HEROKU_APP_NAME -a neon-dev-pr-520`.herokuapps.com"
但它想认证我是Heroku用户。唉,这也不行:

export HOST=$HEROKU_APP_NAME.herokuapps.com
有什么建议吗?

我发现了一些建议,建议您可以使用Heroku平台

在本例中,作为作为postdeploy运行的Rails Rake任务:

desc'Bootstrap review app'
任务引导:['db:schema:load','db:seed']do
heroku=PlatformAPI.connect\u oauth(ENV['heroku\u API\u TOKEN'])
heroku.config_var.update(ENV['heroku_APP_NAME'],'WWW_HOSTNAME'=>“{ENV['heroku_APP_NAME']}.herokuapp.com”)
结束

请查看查看应用程序的文档

只要您在
APP.json
文件中声明必要或可选的
HEROKU\u APP\u NAME
HEROKU\u PARENT\u APP\u NAME
,您就可以在postdeploy脚本中使用它们,这样您就可以执行以下操作:

HOST="$HEROKU_APP_NAME.herokuapp.com"

几年前,在Heroku令人敬畏的支持团队的帮助下完成了这项工作。我们需要为中间件(解析服务器)设置一个自反环境变量,以了解连接到什么。它是在我们的登台和生产应用程序上手动设置的,但要在我们的审查应用程序上设置它:

我的app.json包括费用:

  "scripts": {
    "postdeploy": "bin/bootstrap"
  },
...
  "env": {
    "HEROKU_APP_NAME": {
      "required": true
    },
    "HEROKU_PARENT_APP_NAME": {
      "required": true
    },
...
bin/bootstrap是:

#!/usr/bin/env bash

echo $HEROKU_APP_NAME
export SERVER_URL=https://$HEROKU_APP_NAME.herokuapp.com/parse

SERVER\u URL
在我的评论应用程序中可用(且正确)。在postdeploy脚本中使用python请求:

import requests
result = requests.patch(f"https://api.heroku.com/apps/{os.environ.get('HEROKU_APP_NAME')}/config-vars",
                   data=json.dumps({"YOUR_KEY": "SOME_VALUE"}),
                   headers={"Content-Type": "application/json",
                            "Accept": "application/vnd.heroku+json; version=3",
“授权”:f“承载{os.environ.get(“HEROKU\u API\u KEY”)}” )

或在记录时使用curl:

  curl -n -X PATCH https://api.heroku.com/apps/$HEROKU_APP_NAME/config-vars \
  -d '{
  "FOO": "bar",
  "BAZ": "qux"
}' \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.heroku+json; version=3"
当未登录时,添加标题,其中已生成应用令牌:

 -H "Authorization: Bearer $HEROKU_API_KEY"

太好了,谢谢!如果这有助于其他人找到这一点,您可能希望设置的其他环境变量也会遇到同样的问题。太长,读不下去了您在app.json文件的postdeploy脚本中设置的环境变量似乎在review app中保持设置状态^^^请注意--在实际测试之后,情况似乎并非如此,至少截至2018年6月22日。(如果这很重要,作为一个数据点,我正在使用多个构建包。)这是唯一有效的解决方案!有一些额外的步骤是必要的(安装平台api gem,生成令牌,并在登台时将其添加到您的ENV),但我添加了额外的说明由于某些原因,额外的说明和更新的链接被拒绝作为编辑。这是一个很好的链接:我还添加了额外的说明谢谢@JayDorsey不知道为什么会被拒绝,也许请求暂停。我已经更新了OP中的链接。@JayDorsey感谢提供更多详细信息。您是如何生成令牌的?更准确地说,您是否能够以编程方式生成它?正在尝试生成短生命令牌,这些令牌将在config_var启动后不久过期updated@mizurnix我认为阅读文档仍然是可行的(我还没有这样做)。您可能能够创建一个长寿命的auth/令牌(可能只有令牌create perms?),然后使用该令牌创建短命的令牌来修改环境变量。我以前没有这样做过,我只是在上面链接的页面上查看auth:docs。无论哪种方式,您都必须在某个地方拥有某种长时间运行的持久化令牌。如果安全性是最重要的,您将需要使用某种安全的键值存储(而不是ENV),这在2020年9月似乎不起作用。刚试过。