如何在Heroku预览应用程序postdeploy脚本中设置ENV var

时间:2016-12-05 21:52:06

标签: heroku environment-variables

我想在预览应用上将HOST env var设置为$HEROKU_APP_NAME.herokuapps.com。在app.json中看起来我不能这样做,因为这是一个计算值。

我希望在像这样的“postdeploy”脚本中执行此操作

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

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

我发现this post表示您可以使用Heroku PlatformAPI。

在这种情况下,作为Rails Rake任务运行作为postdeploy:

desc 'Bootstrap review app'
task bootstrap: ['db:schema:load', 'db:seed'] do
  heroku = PlatformAPI.connect_oauth(ENV['HEROKU_API_TOKEN'])
  heroku.config_var.update(ENV['HEROKU_APP_NAME'], 'WWW_HOSTNAME' => "#{ENV['HEROKU_APP_NAME']}.herokuapp.com")
end

答案 1 :(得分:0)

查看评论应用https://devcenter.heroku.com/articles/github-integration-review-apps#heroku_app_name-and-heroku_parent_app_name

的文档

只要您在HEROKU_APP_NAME文件中声明HEROKU_PARENT_APP_NAMEapp.json为必需或可选,就可以在postdeploy脚本中使用它们,这样您就可以:

HOST="$HEROKU_APP_NAME.herokuapp.com"

答案 2 :(得分:0)

几年前在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_URL在我的评论应用中可用(并且正确)。自从我们实施以来就没问题。

答案 3 :(得分:0)

在部署后脚本中使用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_API_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"