Réfléchir Heroku version push dans l'application

Chaque fois que je pousse mon application à heroku, je vois la ligne

-----> Launching... done, v43 

Y at-il un moyen de faire apparaître ce numéro de version dans l'application afin que les autres personnes puissent voir ce numéro?

Solutions Collecting From Web of "Réfléchir Heroku version push dans l'application"

Pourquoi voudriez-vous dépendre d'exécuter une command après chaque poussée? La réponse acceptée est pire que la configuration de la configuration.

Au lieu de cela, ajoutez à votre Gemfile:

 gem 'heroku-api' 

Ajoutez votre nom d'application et votre key d'API à la configuration Heroku:

 $ heroku config:add HEROKU_APP_NAME=myapp HEROKU_API_KEY=bp6ef3a9... 

Ensuite, mettez quelque chose comme ça dans 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 

Finalement:

 puts ENV["HEROKU_RELEASE_NAME"] => v42 

Maintenant, il est entièrement automatisé. Vous pouvez l'oublier et continuer à travailler sur votre application.

Il est maintenant possible d'essayer le trait de Heroku que Roberto a écrit dans sa réponse, sans contacter Heroku. Il s'appelle Heroku Labs: Dyno Metadata et vous pouvez l'activer par

 heroku labs:enable runtime-dyno-metadata -a <app name> 

puis l'information est disponible (sur le deployment suivant) en tant que variables d'environnement:

 ~ $ env 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 ... 

Nous n'avons pas besoin d'installer de file de configuration ou autre.

Après chaque push , exécutez (en supposant un shell bash ):

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

Vous pouvez ensuite accéder à la variable d'environnement rel depuis votre application.

Alternativement, si vous souhaitez présenter la date de la poussée, qui, IMO, représente des informations plus significatives:

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

Ou, mon préféré, qui contient la date et la version sans espace:

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

J'ai eu le même problème et l'ai fait à travers un deployment POST HTTP hook. Fondamentalement, la logique est que j'ai créé une URL spécifique dans mon application et je post la nouvelle valeur pour mettre à jour la variable de configuration.

Je l'ai fait en Python / Django, mais je suis sûr que la même logique peut être utilisée pour d'autres langages:

 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 

AFAIK vous ne pouvez get la version via la CLI:

 heroku releases --app <YOUR_APP_NAME> 

Vous pouvez le faire via la gemme Heroku à partir de votre application, mais c'est probablement plus de problèmes que cela vaut la peine.

Vous pouvez créer un file Ruby pour effectuer les opérations suivantes:

 require 'heroku' heroku = Heroku::Client.new('username','password') puts heroku.releases('appname') 

Cela renvoie un document JSON qui contient une tonne de métadonnées sur vos deployments, notamment SHA, numéro de version, etc.

J'utilise Codeship donc je prévois de simplement append ceci à la configuration de push:

heroku config:add HEROKU_RELEASE_VERSION=$(heroku releases | head -2 | awk 'NR==2' | awk '{print $1}')

Notez que l'autre réponse similaire est invalide car elle saisit certaines des versions ultérieures (elle utilise tail au lieu de head) et elle essaie de le définir en deux versions au lieu d'une seule (ie: v100 \n v101 ).

Dans Node.js en utilisant JavaScript fetch (et le prochain async / await), vous pouvez le faire avec le code suivant (pas de hooks!):

 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; 

en utilisant

 function base64Encode(str) { return new Buffer(str, 'binary').toSsortingng('base64'); } 

Notez que cela nécessite

 $ heroku config:set HEROKU_API_TOKEN=\`heroku auth:token`. 

Voir devcenter.heroku.com/articles/platform-api-reference#release-list .

Après @jassa réponse – mais en utilisant le plus récent 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