在应用程序中反映Heroku推送版本

Nic*_*nto 24 git heroku ruby-on-rails-3.1

每次我将我的应用程序推送到heroku时,我都会看到该行

-----> Launching... done, v43
Run Code Online (Sandbox Code Playgroud)

有没有办法在应用程序中创建该版本号,以便其他人可以看到该号码?

jas*_*ssa 37

为什么要在每次推送后依赖于运行命令?接受的答案比自己设置配置更糟糕.

而是添加到您的Gemfile:

gem 'heroku-api'
Run Code Online (Sandbox Code Playgroud)

将您的应用程序名称和API密钥添加到Heroku配置:

$ heroku config:add HEROKU_APP_NAME=myapp HEROKU_API_KEY=bp6ef3a9...
Run Code Online (Sandbox Code Playgroud)

然后把这样的东西放在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
Run Code Online (Sandbox Code Playgroud)

最后:

puts ENV["HEROKU_RELEASE_NAME"]
=> v42
Run Code Online (Sandbox Code Playgroud)

现在它完全自动化了.您可以忘掉它并继续使用您的应用程序.

  • 这是一个非常优雅的答案,比接受的答案恕我直言.我唯一要改变的是API密钥也应该是配置的一部分,而不是硬编码.请记住,这会将您帐户的API密钥公开给所有协作者,因此为此目的添加特定协作者可能会更好. (2认同)

Ash*_*tan 18

现在可以在没有联系Heroku的情况下尝试Roberto在他的回答中写的Heroku功能.它被称为Heroku实验室:Dyno元数据,您可以通过它启用它

heroku labs:enable runtime-dyno-metadata -a <app name>
Run Code Online (Sandbox Code Playgroud)

然后信息可用(在下次部署时)作为环境变量:

~ $ 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
...
Run Code Online (Sandbox Code Playgroud)

我们不必设置任何配置文件或其他.


nic*_*bot 7

之后 push运行(假设bash壳):

heroku config:add rel=$(heroku releases | tail -2 | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

然后,您只需rel从应用程序访问环境变量即可.

或者,如果您想要提供推送日期,IMO代表更有意义的信息:

heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5,$6,$7}')
Run Code Online (Sandbox Code Playgroud)

或者,我最喜欢的,它包含没有空格的日期和版本:

heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5"t"$6$7"."$1}')
Run Code Online (Sandbox Code Playgroud)

  • 并且在_every_ deploy之后你需要这样做 (3认同)