如何以编程方式访问当前的Heroku发行版?

时间:2011-10-27 14:33:31

标签: heroku

这是否可能 - 是否有像RELEASE_VERSION环境变量?

5 个答案:

答案 0 :(得分:19)

现在有一个名为Heroku Labs的已发布Dyno Metadata功能可以为您提供此信息。一旦启用它,您运行的dyno环境将包含具有应用程序的Heroku版本ID的环境变量,用于构建版本slug的git commit hash等等。例如:

HEROKU_APP_ID:                   9daa2797-e49b-4624-932f-ec3f9688e3da
HEROKU_APP_NAME:                 example-app
HEROKU_DYNO_ID:                  1vac4117-c29f-4312-521e-ba4d8638c1ac
HEROKU_RELEASE_VERSION:          v42
HEROKU_SLUG_COMMIT:              2c3a0b24069af49b3de35b8e8c26765c1dba9ff0
HEROKU_SLUG_DESCRIPTION:         Deploy 2c3a0b2

答案 1 :(得分:1)

我知道这是一个老人,但我没有在其他任何地方找到明确的答案,所以我在这里张贴以防万一有人偶然发现这个问题。我添加了一个名为deploy_version.rb的初始化程序,其中包含以下内容:

    if ENV['HEROKU_APP']
        res = `curl -H "Accept: application/json" -u :#{ENV['HEROKU_API_KEY']} -X GET https://api.heroku.com/apps/#{ENV['HEROKU_APP']}/releases`
        last = JSON.parse(res).last
        $deploy_version = last['name']
    else
        $deploy_version = 'local'
    end

然后很容易在您的应用中显示它:

   <meta name="release" content="<%= $deploy_version %>">

答案 2 :(得分:1)

您可以使用.profile.d脚本来调用平台API并设置环境变量:

.profile.d/release.sh

# get the unique release id and set as RELEASE_ID

# Heroku config variables that need to be set
# API_KEY: heroku api key (get from dashboard or `heroku auth:token`
# APP_NAME: set this to your app_name (this could be hardcoded in the profile.d script but
#           would make it harder to manage apps with multiple environments)

res=$(curl -s -H "Accept: application/vnd.heroku+json; version=3"\
              -H "Authorization: Bearer $API_KEY"\
              -H "Range: version ..; order=desc, max=1"\
              -X GET https://api.heroku.com/apps/$APP_NAME/releases)
release_id=$(ruby -rjson -e "j = JSON.parse('$res'); puts j[0]['id']")

export RELEASE_ID=$release_id

例如,在rails应用程序中,ENV ['RELEASE_ID']现在应该设置为最新的版本ID。 (Python将是os.environ.get('RELEASE_ID'))。 bash脚本使用ruby来解析json,我认为json是任何buildpack的默认雪松堆栈的一部分。

答案 3 :(得分:0)

如果您的应用程序的发行版少于200个,则Tomaž Zaman所提到的上述方法将可以胜任。否则不会...请参阅Heroku API文档中的Ranges部分:

https://devcenter.heroku.com/articles/platform-api-reference#ranges

您不需要Heroku Labs功能元数据。这就是您需要的:

curl --request GET \
  --url https://api.heroku.com/apps/{APP_NAME_ID}/releases \
  --header 'Accept: application/vnd.heroku+json; version=3' \
  --header 'Authorization: Bearer {AUTH_TOKEN}' \
  --header 'Range: version;order=desc,max=1'

这将检索包含最新版本的列表(在这种情况下,只有一个,max = 1),您需要做的就是获取response [0]。

答案 4 :(得分:-2)

如果它不在ENV中,则没有一个神奇的地方从中获取变量。