2012-06-11 3 views
7

Mam oddział deweloperski hostowany na Heroku i mamy kilka osób używających tej gałęzi do szukania błędów, byłoby miło pokazać SHA-1 Hash zatwierdzenia to najnowszy wdrożony na Heroku, abyśmy wiedzieli, które błędy należą do którego zatwierdzenia.Konsola Heroku pokazuje najnowszą mieszankę sha z wdrożenia git

Ale nie mogę w ogóle znaleźć żadnej informacji. nic w zmiennej ENV w konsoli uruchamiania heroku. Chociaż "wydanie heroku" pokazuje listę informacji o wdrożeniu, w tym kilka pierwszych znaków skrótu SHA-1, co prowadzi mnie do przekonania, że ​​Heroku musi je zapisać, ale nie mogę go znaleźć. Czy ktoś wie?

Zdaję sobie sprawę, że tak naprawdę nie postawiłem pytania tak jasno, jak powinienem: chciałem znaleźć skrót SHA-1 wewnątrz Rails na Heroku. Tak jak mogę zrobić coś takiego:

<h1><%= ENV['REV']</h1> 

Dziękujemy!

+0

muszę zapytać czemu? Mówisz "mamy kilkoro ludzi używających tego oddziału do szukania błędów" Nie próbuję trollować, ale zastanawiam się, dlaczego nie zgłosisz błędu w dev, załaduj go, żeby inni zobaczyli i scalili raz " zatwierdzone "lub z jakiegokolwiek powodu, dla którego mają oni przeglądać określoną gałąź w heroku, a nie na swoich własnych urządzeniach. – pjammer

+0

nie ma problemu, nie sądzę, że to trolling - Być może moja metoda nie jest wspierana przez optymalne myślenie, ale jeśli testują aplikację tylko na ich lokalnej maszynie, po prostu nie mogę spać dobrze myśląc, że to będzie działa dokładnie tak samo na Heroku. –

+0

ale czy to jest środowisko przemieszczania dla dobra? Jak wielu facetów siedzi w kodzie? Mam na myśli, że jeśli jest błąd, jeden facet rozgałęzia się od mistrza, naprawia go, aktualizuje etapy. Zatwierdzasz to. Następnie wcielasz się w mistrza i popychasz do produkcji. Wszystko pozwala ci trochę przespać. – pjammer

Odpowiedz

10

Treat Heroku jak każdy inny zdalny Git repo - można użyć git ls-remote:

git ls-remote heroku

(heroku tutaj jest pilot nazwa)

UPDATE:

Ponieważ OP faktycznie chce nabyć SHA w Ruby env, jednym z możliwych sposobów byłoby użycie custom buildpack.

Aby rozpocząć, przejdź do strony Heroku's Ruby Buildpack i rozwidnij ją, aby móc tworzyć własne odmiany. Teraz sklonuj widelec i spójrz na lib/language_pack/ruby.rb. Dodaj nową metodę, coś w stylu:

def get_SHA 
    #get SHA 
    #save SHA to ENV, ala: ENV['SHA'] = retrieved_sha 
end 

Sposób, w jaki można uzyskać SHA, zależy od Ciebie. Można wykonać polecenie git i używać co wrócił:

git log -1 --format="%H"

Albo można użyć @ poradę avaynshtok i użyć gem Heroku użyć metody releases.

Następnie, gdy już posiadasz SHA, ustaw go jako ENV var.

Następnie znaleźć metodę compile w ruby.rb i dodać metodę get_sha do końca to:

def compile 
    Dir.chdir(build_path) 
    install_ruby 
    setup_language_pack_environment 
    allow_git do 
     install_language_pack_gems 
     build_bundler 
     create_database_yml 
     install_binaries 
     run_assets_precompile_rake_task 
     get_sha #your additional method 
    end 
end 

Push zmiany z powrotem do GitHub, a teraz udać się do linii poleceń. Musisz dodać nowy config var do aplikacji Heroku:

heroku config:add [email protected]:<your GitHub username>/heroku-buildpack-ruby.git

Zauważ, że musisz upewnić się, że mam zastąpić <your GitHub username> z ... no, swoją nazwę użytkownika GitHub, więc wskazują na twoje rozwidlone repozytorium.

Wreszcie wykonać ostatnie polecenie, które umożliwia Heroku labs feature który umożliwia dostęp do kompilatora ślimak użytkownik vars:

heroku labs:enable user_env_compile

Teraz powinno być wszystko gotowe. Więc co dokładnie dzieje się teraz? Cóż, kiedy będziesz naciskał na Heroku, Heroku otrzyma zmiany, a następnie zobaczy, że masz niestandardowy zestaw adresów URL buildpack. Więc pobierze twój niestandardowy buildpack z GitHub, a następnie użyje go do stworzenia ślimaka. Oznacza to, że po przejściu przez wszystkie domyślne komendy kompilacji, zakończy się to metodą get_sha, która powinna ustawić ENV var SHA na odpowiedni SHA. Teraz powinieneś mieć dostęp do tego ENV var z poziomu Ruby, aby zrobić to, co chcesz.

+0

Przepraszamy za moje niejasne pytanie. Mam znaleźć tę informację wewnątrz Railsów –

+0

Ach, cóż, to trochę zmienia sytuację. Nie sądzę, żeby istniała jakakolwiek wbudowana funkcja Heroku, ale jeśli jesteś na Cedar, możesz rozwikłać buildpack Ruby/Rails i ustawić ENV samodzielnie. – redhotvengeance

+0

Rozumiem. to szkoda, naprawdę miałem nadzieję, że gdzieś zapisali SHA. Mam na myśli to, że jest on pobierany z polecenia "heroku releases", co oznacza, że ​​ma go * gdzieś * ... –

3

Można uzyskać informacje zwolnić używając gem Heroku: https://github.com/heroku/heroku

c = Heroku::Client.new <LOGIN>, <PASSWORD> 
c.releases(<APPNAME>).last['commit'] 

Alternatywnie, można uwierzytelniać przy użyciu klucza API:

c = Heroku::Client.new '', <API_KEY> 

Minusem jest to, że trzeba przechowywać combo login/hasło (lub klucz API) gdzieś (w twojej aplikacji lub Heroku env).

Można również użyć rozmieszczenia haków, aby uzyskać tę informację: https://devcenter.heroku.com/articles/deploy-hooks

+0

Zarówno haki, jak i klient wyglądają obiecująco, idę z buildpack, ponieważ wydaje się on mniej uciążliwy w budowaniu niż wcześniej sądziłem, i wydaje się, że mam zmienną ENV unika konieczności wywoływania klienta Heroku za każdym razem, gdy chce się spojrzeć na SHA (który zamierzam umieścić na każdej stronie jak pieczęć). Chociaż hak wdrażania wyeliminuje to, przechowując go w pewnej tabeli bazy danych. Więc jeśli buildpack nie działa, być może będę musiał się do tego odwołać. Dziękuję Avaynshtok –

1

skończyło się używając Heroku platform API gem do tego. To duża długo zdyszany, ale jest memoized, więc wystarczy to zrobić raz na wdrażanie i zapisuje aprowizacji z niestandardowych buildpacks (skrzypce) i wdrożyć haki (niepewnie):

def current_sha 
    @current_sha ||= begin 
    heroku = PlatformAPI.connect_oauth(ENV['HEROKU_TOKEN']) 
    slug_id = heroku.release.list(ENV['HEROKU_APP']).last["slug"]["id"] 
    heroku.slug.info(ENV['HEROKU_APP'], slug_id)["commit"] 
    end 
end 
+0

To naprawdę świetna propozycja. Zauważyłem, że implementacja HTTP HTTP Heroku jest od czasu do czasu flakowana. –

+0

To nie daje mi prawidłowego zatwierdzenia. Zwraca krótki sha, ale nie jestem pewien, co to jest i nie aktualizuje się po wielokrotnych połączeniach. Gdzie jest "ostatnia" metoda zdefiniowana dla listy wydawniczej? – justingordon

+0

Problem polega na tym, że działa to tylko wtedy, gdy masz mniej niż 200 git commits! https://discussion.heroku.com/t/can-a-custom-buildpack-put-the-current-git-commit-sha-into-apps-env/932. Po 200, dostajesz tę samą wersję za każdym razem! Musi w jakiś sposób prosić o ostatnią wersję bardziej efektywnie. – justingordon