Cum pot accesa programatic versiunea curentă a versiunii Heroku?

Este chiar posibil acest lucru - este ceva asemănător unei variabile de mediu RELEASE_VERSION?

13

4 răspunsuri

Acum există o caracteristică Heroku Labs , numită Dyno Metadata care vă oferă aceste informații. Odată ce o activați, mediul în care rulează dyno va conține variabile de mediu cu ID-ul versiunii Heroku al aplicației dvs., hash-ul de comitere git din care a fost construit slugul dvs. de lansare și multe altele. De exemplu:

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
14
adăugat

dacă nu este în ENV atunci nu există un loc magic pentru a scoate variabilele de la.

2
adăugat
nu, a fost vina mea - ENV este pentru Ruby. Nu sunt sigur de Python, mi-e teamă.
adăugat autor John Beynon, sursa
Consultați docs.python.org/library/os.html - os. environ , os.getenv (varname [ valoare]) et cetera
adăugat autor Kristian Glass, sursa
Îmi pare rău pentru întrebarea n00b aici - dacă folosesc Python, cum pot accesa ENV - este acesta un dicționar de variabile? Nu pot găsi niciun document pe heroku re: ENV.
adăugat autor Gabriel Florit, sursa

S-ar putea să o faceți cu un script .profile.d care solicită API-ul de platformă și să setați o variabilă de mediu:

.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

Într-o aplicație pentru șine, de exemplu, ENV ['RELEASE_ID'] ar trebui acum setată la cel mai recent ID de lansare. (Python va fi os.environ.get ('RELEASE_ID') ). Scriptul bash folosește rubinul pentru a analiza json-ul, care cred că face parte din stack-ul implicit de cedar pentru orice pachet buildpack.

1
adăugat

Știu că este o veche, dar nu am găsit un răspuns clar în altă parte, așa că am postat-o ​​aici, în caz că cineva se poticnește asupra acestei întrebări. Am adăugat un inițializator, numit deploy_version.rb, cu următorul conținut:

    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

Apoi este ușor să îl afișați în aplicația dvs.:

   <meta name="release" content="<%= $deploy_version %>">
1
adăugat