Ponownie wdróż aplikację Heroku bez zmian w kodzie

88

Chciałbym wdrożyć aplikację Heroku, która zostanie wykonana idealnie przy użyciu git push -u heroku master. Jednak zadziała to tylko wtedy, gdy istnieją jakieś oczekujące zatwierdzenia, które mają zostać przesłane do mastera.

Jak mogę ponownie wdrożyć aplikację, gdy nie ma nic do przekazania? Próbowałem git push -u heroku master -fi nadal mam to samo poniżej

Branch master set up to track remote branch master from heroku.
Everything up-to-date

PS: Chcę również zachować istniejącą aplikację, co oznacza, że ​​nie mogę skorzystać z tej odpowiedzi https://stackoverflow.com/a/22043184/968442

nehem
źródło
3
To brzmi jak problem XY . Co masz nadzieję osiągnąć, ponownie wdrażając ten sam kod?
Chris,
1
Przypadek, w którym zmieniłem kilka configvarów, które zasługują na ponowne wdrożenie, ale bez zatwierdzeń
nehem
1
Ustawienie zmiennej config powoduje ponowne uruchomienie aplikacji. Powinien zacząć obowiązywać bez konieczności ponownego wdrażania. Czy mógłbyś to sprecyzować?
Chris
2
Niestety, zmienną konfiguracyjną, którą usunąłem, był DISABLE_COLLECTSTATIC=1, który powinien wywoływać kolejne polecenie Django, manage.py collectstaticktóre jest podpięte do logiki wdrażania heroku.
nehem

Odpowiedzi:

139

Zwykle ustawienie zmiennej config powoduje ponowne uruchomienie aplikacji. W większości sytuacji po wykonaniu tej czynności nie powinno być potrzeby ponownego wdrażania.

Jeśli naprawdę potrzebujesz wyzwolić nowe wdrożenie, możesz dodać nowe puste zatwierdzenie, a następnie ponownie wysłać do Heroku:

git commit --allow-empty -m "Trigger Heroku deploy after enabling collectstatic"
git push heroku master

Nowy pusty zatwierdzenie jest zwykłym zatwierdzeniem. Ma hash, autora, znacznik czasu itp. Będzie mieć to samo drzewo co jego rodzic. Powinno to spowodować, że Heroku ponownie zbuduje slug aplikacji przy użyciu tego samego kodu, co w poprzednim zatwierdzeniu.

To trochę niezręczne, ale działa.

Chris
źródło
Brzmi uczciwie i spełnia swoje zadanie. Teraz kusi mnie, aby wykonać kopię zapasową / przywrócić repozytorium ( .git), aby ukryć to zatwierdzenie przed githubem.
nehem
@itsneo, nie zawracałbym sobie głowy. To brzydkie zatwierdzenie, ale jeśli będziesz nadal pisać kod na podstawie poprzedniego zatwierdzenia, następnym razem będziesz musiał wymusić wypchnięcie do Heroku. To nie jest wspaniały nawyk, chociaż czasami może być konieczny…
Chris
Nawet jeśli git commit --allow-emptyotrzymuję Everything up-to-dateod Heroku ...
Benny Neugebauer
@BennyNeugebauer, spójrz na swoje git log. Czy pomyślnie utworzyłeś nowe zatwierdzenie przed pushowaniem?
Chris,
4
Ach, widzę problem! Byłem w innym oddziale lokalnym (niż master). Więc musiałem wykonać: git push -f heroku the_branch_i_changed:master.
Benny Neugebauer
22

Możesz to również zrobić z poziomu interfejsu użytkownika!

  1. Zaloguj się do swojego Herokupanelu i przejdź do deploysekcji
  2. Znajdź Manual deployopcję

Naciśnij Deploy Branchprzycisk!

wprowadź opis obrazu tutaj

Hardik Raval
źródło
2
Warto zauważyć, że aby ta opcja była dostępna, musisz mieć swoją aplikację połączoną z GitHubem. Jeśli używasz metody wdrażania Heroku Git bez połączenia aplikacji z jej repozytorium GitHub, nie jest od razu oczywiste, jak wdrożyć ręcznie.
Derek
11

Dostępna jest teraz również wtyczka do wiersza poleceń Heroku, która umożliwia ponowne wydanie ostatnio wdrożonego ślimaka.

Zobacz https://www.npmjs.com/package/heroku-releases-retry

Richard
źródło
Na początku myślałem, że to rozwiązanie, ale w rzeczywistości to tylko ponowne wdrażanie, ale nie odbudowa. Ale jest też sposób na przebudowanie bez skażenia historii Git przez wypchnięcie nowego zatwierdzenia: stackoverflow.com/q/9713183/322863
aef
4

Możesz biec heroku restart --app app_namei możesz iść.

Leandro
źródło
3
To nie odbudowuje aplikacji, a jedynie ją restartuje
PanMan
@PanMan Pytanie brzmi „Jak mogę ponownie wdrożyć aplikację, gdy nie ma nic do przekazania?”. Nie jest to prośba o odbudowę aplikacji, ale o ponowne uruchomienie, a biorąc pod uwagę, że nie było żadnych zmian, i tak nie rozumiem, dlaczego chcesz to zrobić.
Leandro
1
Wyraźnie mówi, że „wdróż ponownie”, a nie „uruchom ponownie”. Na przykład muszę ponownie wdrożyć (nie restartować), ponieważ próbuję dokerować moją aplikację za pomocą Heroku, a podczas debugowania nie chcę potencjalnie zanieczyszczać mojego drzewa git. Tak właśnie skończyłem na tym pytaniu SO.
Mike K