Za każdym razem, gdy wciskam aplikację Heroku widzę linięZastanawiając Heroku wersji Push w aplikacji
-----> Launching... done, v43
Czy istnieje sposób, aby to numer wersji apear w aplikacji, aby inni ludzie mogli zobaczyć ten numer?
Za każdym razem, gdy wciskam aplikację Heroku widzę linięZastanawiając Heroku wersji Push w aplikacji
-----> Launching... done, v43
Czy istnieje sposób, aby to numer wersji apear w aplikacji, aby inni ludzie mogli zobaczyć ten numer?
Dlaczego chcesz polegać na prowadzeniu polecenie po co push? Przyjęta odpowiedź jest gorsza niż samodzielne ustawienie konfiguracji.
Zamiast dodawać do Gemfile:
gem 'heroku-api'
Dodaj swoją nazwa aplikacji i API klucz do config Heroku:
$ heroku config:add HEROKU_APP_NAME=myapp HEROKU_API_KEY=bp6ef3a9...
następnie umieścić coś takiego w 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
Wreszcie:
puts ENV["HEROKU_RELEASE_NAME"]
=> v42
Teraz jest w pełni zautomatyzowany. Możesz o tym zapomnieć i kontynuować pracę nad swoją aplikacją.
To bardzo elegancka odpowiedź, lepsza niż zaakceptowana odpowiedź IMHO. Mogę tylko zmienić to, że klucz API powinien być częścią konfiguracji, a nie zakodowany na stałe. Pamiętaj, że ujawnia klucz API dla Twojego konta wszystkim współpracownikom, więc może lepiej dodać do tego konkretnego współpracownika. – mjtko
zgodził^dziękuję za obserwację – jassa
To działało świetnie, gdy tylko przyszło mi do głowy, że działa to tylko wtedy, gdy aplikacja działa na Heroku ... duh! Właśnie przez ENV ["HEROKU_RELEASE_NAME"] na pasku nawigacji. Dzięki! – SteveO7
AFAIK można dostać tylko w wersji poprzez CLI:
heroku releases --app <YOUR_APP_NAME>
Można to zrobić za pośrednictwem gem Heroku od Ciebie aplikacja, ale jest to prawdopodobnie więcej kłopotów, że warto.
Po każdypush
, run (zakładając bash
shell):
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $1}')
Można wtedy tylko dostęp do zmiennej środowiskowej rel
z aplikacji.
Alternatywnie, jeśli chcesz przedstawić datę Push, który, IMO, reprezentuje bardziej znaczące informacje:
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5,$6,$7}')
Or, mój ulubiony, który zawiera datę i wersję bez spacji:
heroku config:add rel=$(heroku releases | tail -2 | awk '{print $5"t"$6$7"."$1}')
dziękuję, to jest niesamowite! –
i musisz to zrobić po _every_ wdrożyć –
Działa to, ale powoduje ponowne uruchomienie aplikacji, aby zastosować zmienioną konfigurację. To nie jest korek, ale coś, o czym trzeba pamiętać. –
Miałem ten sam problem i zrobiłem to poprzez wdrożenie haka POST HTTP. Zasadniczo logika polega na tym, że utworzyłem określony adres URL w mojej aplikacji i publikuję nową wartość, aby zaktualizować zmienną konfiguracyjną.
Zrobiłem to w Python/Django, ale jestem pewien, że ta sama logika może być wykorzystywane do innych języków, a także:
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
Można dokonać Ruby plik wykonać następujące czynności:
require 'heroku'
heroku = Heroku::Client.new('username','password')
puts heroku.releases('appname')
ta zwraca dokument JSON, który zawiera mnóstwo metadanych o swoich wdraża należą SHA, numer wersji itp
Używam Codeship więc mam zamiar po prostu dodając to do konfiguracji Push:
heroku config:add HEROKU_RELEASE_VERSION=$(heroku releases | head -2 | awk 'NR==2' | awk '{print $1}')
Należy zauważyć, że inne podobne odpowiedź jest nieprawidłowa, ponieważ jest chwytając niektórych późniejszych wersjach (używa ogona zamiast głowy) i próbuje ustawić dwie wersje zamiast jednej (np. v100 \n v101
).
Teraz można wypróbować funkcję Heroku, o której pisał Roberto w swojej odpowiedzi, bez kontaktu z Heroku. To się nazywa Heroku Labs: Dyno Metadata i można ją włączyć przez
heroku labs:enable runtime-dyno-metadata -a <app name>
a następnie informacje te są dostępne (na następnej deploy) jako zmienne środowiskowe:
~ $ 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
...
Nie musimy skonfigurować dowolny plik konfiguracyjny lub jeszcze.
W node.js użyciu JavaScript fetch
(i przyszły asynchroniczny/czekają), można to zrobić za pomocą następującego kodu (bez haczyków Push!):
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;
użyciu
function base64Encode(str) {
return new Buffer(str, 'binary').toString('base64');
}
Uwaga: Wymaga to uzyskania
$ heroku config:set HEROKU_API_TOKEN=\`heroku auth:token`.
Zobacz devcenter.heroku.com/articles/platform-api-reference#release-list.
Po @jassa odpowiedź - ale przy użyciu nowszych 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
skopiować i wkleić :) – manojlds
to prawda, ale mi chodziło :) –
automagicznie 'kopiuj/paste' nie jest przyjacielem programisty, jest automatyzacja . Zobacz [moja odpowiedź] (http://stackoverflow.com/a/8793568/23056), aby zautomatyzować to. – nicerobot