Hoe krijg ik programmatisch toegang tot de huidige versie van de Heroku-versie?

Is dit zelfs mogelijk - is er zoiets als een RELEASE_VERSION omgevingsvariabele?

13

4 antwoord

Er is nu een vrijgegeven Heroku Labs -functie genaamd Dyno Metadata die u deze informatie geeft. Als je het eenmaal hebt ingeschakeld, bevat de omgeving van je hardloop-dynamo omgevingsvariabelen met de Heroku-versie-ID van je app, de git commit-hash waaruit je releaselittel is gebouwd en nog veel meer. Bijvoorbeeld:

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
toegevoegd

als het niet in ENV is, is er geen magische plek om variabelen uit te plukken.

2
toegevoegd
nee, het was mijn fout - ENV is voor Ruby. Ik ben niet zeker van Python.
toegevoegd de auteur John Beynon, de bron
Zie docs.python.org/library/os.html - os. environ , os.getenv (varname [ value]) et cetera
toegevoegd de auteur Kristian Glass, de bron
sorry voor de n00b-vraag hier - als ik Python gebruik, hoe kan ik ENV gebruiken - is dit een woordenboek met variabelen? Ik kan geen documenten vinden op heroku re: ENV.
toegevoegd de auteur Gabriel Florit, de bron

U zou het kunnen doen met een .profile.d-script dat de platform-API aanroept en een omgevingsvariabele instelt:

.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

In een rails-app moet ENV ['RELEASE_ID'] nu bijvoorbeeld worden ingesteld op de meest recente release-ID. (Python zou zijn os.environ.get ('RELEASE_ID') ). Het bash-script gebruikt robijn om de json te ontleden waarvan ik denk dat deze deel uitmaakt van de standaardcederhars stack voor elk buildpack.

1
toegevoegd

Ik weet dat het een oudje is, maar ik heb nergens anders een duidelijk antwoord gevonden, dus ik plaats het hier voor het geval iemand op deze vraag stuit. Ik heb een initializer, genaamd deploy_version.rb, toegevoegd met de volgende inhoud:

    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

Dan is het eenvoudig om het in uw app weer te geven:

   <meta name="release" content="<%= $deploy_version %>">
1
toegevoegd