Как установить ENV var в приложении предварительного просмотра Heroku postdeploy script

Я хочу установить HOST env var в $HEROKU_APP_NAME.herokuapps.com в приложении предварительного просмотра. Не похоже, что я могу сделать это в app.json, так как это вычисленное значение.

Я надеялся сделать это в "postdeploy" script, как этот

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

Любые предложения?

Ответ 1

Я нашел этот пост, который предполагает, что вы можете использовать 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

Ответ 2

Ознакомьтесь с документацией по обзору приложений https://devcenter.heroku.com/articles/github-integration-review-apps#heroku_app_name-and-heroku_parent_app_name

Пока вы объявляете HEROKU_APP_NAME или HEROKU_PARENT_APP_NAME как обязательные или необязательные в файле app.json, они будут доступны для использования в сценарии postdeploy, поэтому вы можете просто сделать:

HOST="$HEROKU_APP_NAME.herokuapp.com"

Ответ 3

Несколько лет назад с помощью великолепной команды поддержки Heroku. Нам нужно было установить рефлексивную переменную среды для промежуточного программного обеспечения (parse-server), чтобы знать, к чему подключаться. Он устанавливается вручную в наших приложениях Staging и Production, но для настройки в наших обзорных приложениях:

Мой 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 доступно (и правильно) в моих обзорах приложений. С тех пор, как мы внедрили, проблем не было.

Ответ 4

Использование запросов Python в сценарии postdeploy:

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"