每次我把我的应用程序推到heroku我看到的线
-----> Launching... done, v43
有没有一种方法可以让这个版本号在应用程序中显示出来,这样其他人就可以看到这个版本号?
xnifntxz1#
为什么要依赖于在 * 每次 * 推送后运行命令?公认的答案比自己设置配置更糟糕。添加到您的Gemfile:
gem 'heroku-api'
将您的应用名称和API密钥添加到Heroku配置:
$ heroku config:add HEROKU_APP_NAME=myapp HEROKU_API_KEY=bp6ef3a9...
然后在config/initializers/heroku.rb中输入如下内容:
config/initializers/heroku.rb
unless (app_name = ENV["HEROKU_APP_NAME"]).nil? require 'heroku-api' heroku = Heroku::API.new(:api_key => ENV["HEROKU_API_KEY"]) release = heroku.get_releases(app_name).body.last ENV["HEROKU_RELEASE_NAME"] = release["name"] end
最后:
puts ENV["HEROKU_RELEASE_NAME"] => v42
uhry853o2#
现在可以尝试Roberto在回答中提到的Heroku功能,而无需联系Heroku。它名为Heroku Labs: Dyno Metadata,您可以通过以下方式启用它:
heroku labs:enable runtime-dyno-metadata -a <app name>
然后信息作为环境变量可用(在下一次部署时):
~ $ env HEROKU_APP_ID: <some-hash-appId> HEROKU_APP_NAME: example-app HEROKU_DYNO_ID: <some-hash-dynoId> HEROKU_RELEASE_VERSION: v42 HEROKU_SLUG_COMMIT: <some-hash-slugCommit> HEROKU_SLUG_DESCRIPTION: Deploy 2c3a0b2 ...
注意:通过Heroku Labs添加的功能是实验性的,可能会发生变化。我们不需要设置任何配置文件或其他。
lpwwtiir3#
在 everypush之后,运行(假设是bash shell):
push
bash
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $1}')
然后,您可以从应用程序访问rel环境变量。或者,如果你想展示推送的日期,IMO,这代表了更有意义的信息:
rel
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5,$6,$7}')
或者,我的最爱,其中包含日期和版本,没有空格:
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5"t"$6$7"."$1}')
j8ag8udp4#
我也遇到了同样的问题,并通过部署POST HTTP钩子来解决。基本的逻辑是,我在我的应用程序中创建了一个特定的URL,我发布了新的值来更新配置变量。我在Python/Django中做到了这一点,但我相信同样的逻辑也可以用于其他语言:
import heroku cloud = heroku.from_key(settings.HEROKU_API_KEY) app = cloud.apps['mycoolapp'] latest_release = app.releases[-1] app.config['RELEASE'] = latest_release.name result['status'] = 200
g52tjvyc5#
AFAIK您只能通过CLI获取版本:
heroku releases --app <YOUR_APP_NAME>
你可以通过你的应用程序中的Heroku gem来做到这一点,但这可能比它的价值更麻烦。
ygya80vv6#
您可以创建一个Ruby文件来执行以下操作:
require 'heroku' heroku = Heroku::Client.new('username','password') puts heroku.releases('appname')
这将返回一个JSON文档,其中包含大量关于部署的元数据,包括SHA,版本号等。
tyg4sfes7#
我正在使用Codeship,所以我计划将其添加到推送配置中:heroku config:add HEROKU_RELEASE_VERSION=$(heroku releases | head -2 | awk 'NR==2' | awk '{print $1}')请注意,另一个类似的答案是无效的,因为它是抓住一些后来的版本(它使用尾部而不是头部),并试图将其设置为两个版本,而不是一个(即:v100 \n v101)。
heroku config:add HEROKU_RELEASE_VERSION=$(heroku releases | head -2 | awk 'NR==2' | awk '{print $1}')
v100 \n v101
zphenhs48#
在Node.js中使用JavaScript fetch(以及即将推出的javascript/await),您可以使用以下代码(没有推送钩子!):
fetch
const fetch = require('node-fetch'); const url = 'https://api.heroku.com/apps/myapp/releases'; const headers = { Accept: 'application/vnd.heroku+json; version=3', Authorization: 'Basic '+base64Encode(':'+process.env.HEROKU_API_TOKEN) }; const response = await fetch(url, { headers }); const releases = await response.json(); const lastRelease = releases[releases.length-1]; const version = lastRelease.version; const created = lastRelease.created_at;
使用
function base64Encode(str) { return new Buffer(str, 'binary').toString('base64'); }
注意,这需要
$ heroku config:set HEROKU_API_TOKEN=\`heroku auth:token`.
参见devcenter.heroku.com/articles/platform-api-reference#release-list。
a64a0gku9#
遵循@jassa答案-但使用更新的PlatformAPI
if (app_name = ENV["HEROKU_APP_NAME"]).present? and ENV['HEROKU_API_KEY'].present? require 'platform-api' heroku = PlatformAPI.connect(ENV['HEROKU_API_KEY'], default_headers: {'Range' => 'version ..; order=desc'}) released_at_s = heroku.app.info(app_name)['released_at'] released_at_d = Time.parse(released_at_s).strftime('%Y-%m-%d') release = heroku.release.list(app_name).first deploy_v = release['description'] version = release['version'] ENV['HEROKU_RELEASE_NAME'] = "#{version} (#{deploy_v}) #{released_at_d}" end
9条答案
按热度按时间xnifntxz1#
为什么要依赖于在 * 每次 * 推送后运行命令?公认的答案比自己设置配置更糟糕。
添加到您的Gemfile:
将您的应用名称和API密钥添加到Heroku配置:
然后在
config/initializers/heroku.rb
中输入如下内容:最后:
uhry853o2#
现在可以尝试Roberto在回答中提到的Heroku功能,而无需联系Heroku。它名为Heroku Labs: Dyno Metadata,您可以通过以下方式启用它:
然后信息作为环境变量可用(在下一次部署时):
注意:通过Heroku Labs添加的功能是实验性的,可能会发生变化。
我们不需要设置任何配置文件或其他。
lpwwtiir3#
在 every
push
之后,运行(假设是bash
shell):然后,您可以从应用程序访问
rel
环境变量。或者,如果你想展示推送的日期,IMO,这代表了更有意义的信息:
或者,我的最爱,其中包含日期和版本,没有空格:
j8ag8udp4#
我也遇到了同样的问题,并通过部署POST HTTP钩子来解决。基本的逻辑是,我在我的应用程序中创建了一个特定的URL,我发布了新的值来更新配置变量。
我在Python/Django中做到了这一点,但我相信同样的逻辑也可以用于其他语言:
g52tjvyc5#
AFAIK您只能通过CLI获取版本:
你可以通过你的应用程序中的Heroku gem来做到这一点,但这可能比它的价值更麻烦。
ygya80vv6#
您可以创建一个Ruby文件来执行以下操作:
这将返回一个JSON文档,其中包含大量关于部署的元数据,包括SHA,版本号等。
tyg4sfes7#
我正在使用Codeship,所以我计划将其添加到推送配置中:
heroku config:add HEROKU_RELEASE_VERSION=$(heroku releases | head -2 | awk 'NR==2' | awk '{print $1}')
请注意,另一个类似的答案是无效的,因为它是抓住一些后来的版本(它使用尾部而不是头部),并试图将其设置为两个版本,而不是一个(即:
v100 \n v101
)。zphenhs48#
在Node.js中使用JavaScript
fetch
(以及即将推出的javascript/await),您可以使用以下代码(没有推送钩子!):使用
注意,这需要
参见devcenter.heroku.com/articles/platform-api-reference#release-list。
a64a0gku9#
遵循@jassa答案-但使用更新的PlatformAPI