Ich habe ein Projekt, das Serve verwendet und mit Git versioniert wird. Serve erstellt einen output
Ordner mit statischen Dateien, die ich für Heroku bereitstellen möchte.
Ich möchte das Serve-Projekt nicht selbst bereitstellen, da der Heroku Cedar-Stack es nicht besonders zu mögen scheint, aber vor allem möchte ich Herokus großartige Unterstützung für statische Websites nutzen.
Gibt es eine Möglichkeit, einen Unterordner auf einer Git-Fernbedienung bereitzustellen? Sollte ich ein Git-Repo im output
Ordner erstellen (das klingt falsch) und das an Heroku senden?
Antworten:
Es gibt einen noch einfacheren Weg über Git-Subtree . Angenommen, Sie möchten die Ausgabe Ihres Ordners als Stamm an Heroku senden, können Sie Folgendes tun:
Es scheint derzeit, dass git-subtree in git-core aufgenommen wird, aber ich weiß nicht, ob diese Version von git-core noch veröffentlicht wurde.
quelle
--force
, verwenden Siegit push heroku `git subtree split --prefix output master`:master --force
. Siehe stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Aber das funktioniert nicht und kommt mit zurück+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Ich benötige diese Art von Funktionalität, um später auf bestimmte Tags zurückgreifen zu können. Was ist der richtige Weg, das zu tun?output
Ordner, der nur in meinemdevelop
Zweig vorhanden war, erfolgreich in denheroku master
Zweig verschoben, ohne dass eine Angabe erforderlichdevelop:master
war. Anscheinend wird er in den von Ihnen angegebenen Zielzweig aus Ihrem aktuell ausgecheckten Zweig verschoben .Ich hatte ein ähnliches Problem. In meinem Fall war es nie ein Problem, alles im Heroku-Repository wegzublasen und durch das zu ersetzen, was sich in meinem Unterverzeichnis befindet. In diesem Fall können Sie das folgende Bash-Skript verwenden. Legen Sie es einfach in Ihrem Rails-App-Verzeichnis ab.
Ich bin mir sicher, dass es viele Möglichkeiten gibt, dies zu verbessern - also zögern Sie nicht, mir zu sagen, wie!
quelle
+1
Vielen Dank. Diese Lösung funktioniert hervorragend, wenn Sie sich nicht für Git-Protokolle auf Heroku interessieren. Sie können das obige Skript optimieren, falls Sie einige Ordner innerhalb des zu implementierenden Anwendungsunterpfads ignorieren möchten. Zum Beispiel wollte ich keinenspec
Ordner auf Heroku. Beispiel Gist+1
Aber Sie können vereinfachen, indem Sie nicht ziehen und in Heroku Master verschmelzen und stattdessen einfachgit push --force heroku master
Ich habe mit dem angefangen, was John Berryman gesagt hat, aber tatsächlich kann es einfacher sein, wenn Sie sich überhaupt nicht für die Heroku-Git-Geschichte interessieren.
Ich denke, offiziell
git subtree
ist die beste Antwort, aber ich hatte Probleme, den Teilbaum auf meinem Mac zum Laufen zu bringen.quelle
Nach einem langen und harten Monat, in dem ich verschiedene Dinge ausprobiert und jedes Mal gebissen wurde, wenn ich merkte,
Nur weil Heroku ein Git-Repository als Bereitstellungsmechanismus verwendet, sollten Sie es nicht als Git-Repository behandeln
es hätte genauso gut rsync sein können, sie haben sich für git entschieden, lassen Sie sich deswegen nicht ablenken
Wenn Sie dies tun, öffnen Sie sich allen Arten von Verletzungen. Alle oben genannten Lösungen scheitern irgendwo kläglich:
bundle deploy
- fehlgeschlagen, müssen Sie jedes Mal ein Update bündeln:path
+bundle deploy
- Fehler hinzuzufügen , betrachtet das:path
Entwicklerteam die Option als "Sie verwenden Bundler nicht mit dieser Edelsteinoption", sodass sie nicht für die Produktion gebündelt wird/vendor
Symlink in der Entwicklung zu verwenden und die Dateien tatsächlich für die Produktion zu kopierenDie Lösung
Die betreffende App hat 4 Projekte in Git Root:
Alle Projekte haben einen
vendor/common
Symlink, der die Wurzel dercommon
Engine betrachtet. Beim Kompilieren des Quellcodes für die Bereitstellung in Heroku müssen wir den Symlink entfernen und den Code rsyncieren, damit er sich physisch im Herstellerordner jedes einzelnen Hosts befindet.Funktioniert sehr, sehr gut in freier Wildbahn mit minimalen (nein?) Problemen seit 6 Monaten
Hier ist das Skript https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Update 1
@AdamBuczynski, es ist noch nie so einfach.
Erstens haben Sie immer mindestens eine Produktions- und Testumgebung - und im schlimmsten Fall eine Reihe funktionsspezifischer Cluster - plötzlich muss 1 Ordner als ziemlich grundlegende Anforderung n Heroku-Projekten zugeordnet werden, und alles muss irgendwie so organisiert werden Das Skript "weiß", welche Quelle Sie wo bereitstellen möchten.
sync_common
Zweitens möchten Sie Code zwischen Projekten teilen - jetzt kommt der Teil, bei dem die Shennanigans mit Symlinks in der Entwicklung durch tatsächlichen rsynchronisierten Code auf Heroku ersetzt werden, da Heroku eine bestimmte Ordnerstruktur benötigt und Bundler und Rubygems die Dinge wirklich sehr, sehr, sehr hässlich machen, wenn Sie möchte die gemeinsamen Fäden in einen Edelstein extrahieren3. Sie möchten CI einstecken und es ändert sich ein wenig, wie Unterordner und Git-Repo organisiert werden müssen. Am Ende erhalten Sie im einfachsten Anwendungsfall den oben genannten Kern.
In anderen Projekten muss ich Java-Builds einbinden. Wenn Sie Software an mehrere Clients verkaufen, müssen Sie Module filtern, die abhängig von den Installationsanforderungen installiert werden.
Ich sollte wirklich darüber nachdenken, Dinge in einem Rakefile oder so zu bündeln und alles so zu machen ...
quelle