这是否可能 - 是否有像RELEASE_VERSION环境变量?
答案 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中,则没有一个神奇的地方从中获取变量。