Mam projekt, który używa usługi Serve i jest kontrolowany wersjami za pomocą Git. Serve tworzy output
folder z plikami statycznymi, które chcę wdrożyć w Heroku.
Nie chcę wdrażać samego projektu Serve, ponieważ stos Heroku Cedar nie wydaje się za bardzo go lubi, ale co najważniejsze, chcę skorzystać z doskonałego wsparcia Heroku dla statycznych witryn internetowych.
Czy istnieje sposób na wdrożenie podfolderu na pilocie Git? Czy powinienem utworzyć repozytorium Git w output
folderze (to brzmi źle) i przekazać to do Heroku?
Odpowiedzi:
Jest jeszcze łatwiejszy sposób poprzez poddrzewo git . Zakładając, że chcesz wypchnąć folder wyjściowy jako katalog główny do Heroku, możesz wykonać:
Obecnie wydaje się, że git-subtree jest dołączane do git-core, ale nie wiem, czy ta wersja git-core została już wydana.
źródło
--force
, użyjgit push heroku `git subtree split --prefix output master`:master --force
. Zobacz stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Ale to nie działa i wraca+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Potrzebuję tego rodzaju funkcji, aby móc później wrócić do określonych tagów. Jaki jest właściwy sposób zrobienia tego?output
folder, który był obecny tylko w mojejdevelop
gałęzi, doheroku master
gałęzi bez potrzeby określaniadevelop:master
, więc najwyraźniej wypycha do gałęzi docelowej, którą określisz z aktualnie wyewidencjonowanej gałęzi.Zacząłem od tego, co powiedział John Berryman, ale w rzeczywistości może być prostsze, jeśli w ogóle nie obchodzi cię historia git heroku.
Wydaje mi się, że oficjalna
git subtree
jest najlepszą odpowiedzią, ale miałem problem z uruchomieniem poddrzewa na moim Macu.źródło
Miałem podobny problem. W moim przypadku nigdy nie było problemu z wysadzeniem wszystkiego w repozytorium heroku i zastąpieniem go tym, co jest w moim podkatalogu. W takim przypadku możesz użyć następującego skryptu bash. Po prostu umieść go w katalogu aplikacji Rails.
Jestem pewien, że istnieje wiele sposobów, aby to poprawić - więc możesz mi powiedzieć, jak to zrobić!
źródło
+1
Dzięki. To rozwiązanie działa świetnie, jeśli nie zależy Ci na logach git na Heroku. Można zmodyfikować powyższy skrypt na wypadek, gdyby istnieją foldery, które chcesz zignorować, w ścieżce podrzędnej aplikacji do wdrożenia. Na przykład nie chciałem miećspec
folderu na heroku. Przykład Gist+1
ale możesz uprościć, nie ciągnąc i nie łącząc się z mistrzem heroku, a zamiast tego po prostugit push --force heroku master
Po długim i ciężkim miesiącu próbowania różnych rzeczy i bycia ugryzionym za każdym razem, gdy zdałem sobie sprawę,
tylko dlatego, że Heroku używa repozytorium git jako mechanizmu wdrażania, nie powinieneś traktować go jako repozytorium git
równie dobrze mógł to być rsync, wybrali git, nie rozpraszaj się z tego powodu
jeśli to zrobisz, otworzysz się na wszelkiego rodzaju krzywdy. Wszystkie powyższe rozwiązania gdzieś fatalnie zawodzą:
bundle deploy
- niepowodzenie, za każdym razem musisz pakować aktualizację:path
+bundle deploy
- niepowodzenie, zespół:path
deweloperów uważa, że opcja „nie używasz Bundlera z tą opcją klejnotu”, więc nie zostanie ona dołączona do produkcji/vendor
dowiązania symbolicznego w trakcie opracowywania i skopiowanie plików do produkcjiRozwiązanie
Ta aplikacja ma 4 projekty w git root:
Wszystkie projekty mają
vendor/common
dowiązanie symboliczne do katalogu głównegocommon
silnika. Podczas kompilowania kodu źródłowego do wdrożenia w heroku musimy usunąć dowiązanie symboliczne i rsync, aby kod znajdował się fizycznie w folderze dostawcy na każdym oddzielnym hoście.Działa bardzo dobrze na wolności z minimalnymi (nie?) Problemami już od 6 miesięcy
Oto skrypt https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Zaktualizuj 1
@AdamBuczynski, to nigdy nie jest takie proste.
Po pierwsze, zawsze będziesz mieć przynajmniej środowisko produkcyjne i testowe - a kilka klastrów specyficznych dla funkcji w gorszym - nagle 1 folder musi być mapowany do n projektów heroku jako dość podstawowy wymóg i wszystko musi być jakoś zorganizowane, aby skrypt „wie”, jakie źródło chcesz wdrożyć i gdzie,
Po drugie, będziesz chciał udostępniać kod między projektami - teraz przychodzi
sync_common
część, shennanigany z linkami symbolicznymi w trakcie opracowywania zostaną zastąpione przez rzeczywisty kod rsynced na Heroku, ponieważ Heroku wymaga określonej struktury folderów i bundlera, a rubygemy naprawdę naprawdę sprawiają, że rzeczy są brzydkie, jeśli ty chcą wydobyć wspólne wątki w klejnotPo trzecie, będziesz chciał podłączyć CI i zmieni się nieco sposób, w jaki muszą być zorganizowane podfoldery i repozytorium git, w końcu w najprostszym możliwym przypadku użycia skończysz z wyżej wymienioną treścią.
W innych projektach muszę podłączać kompilacje Javy, sprzedając oprogramowanie wielu klientom będziesz musiał filtrować moduły, które są instalowane w zależności od wymagań instalacji i tak dalej,
Naprawdę powinienem rozważyć dołączenie rzeczy do pliku Rakefile lub czegoś podobnego i zrobić wszystko w ten sposób ...
źródło