2009-06-01 10 views
5

Welche Best Practices und allgemeine Theorie der mehrstufigen Bereitstellung von Web-Apps gibt es?Mehrstufige Einsatzempfehlung?

Ich bin besonders interessiert Rails bei der Bereitstellung von Apps mit Git, Capistrano, und Passagiere, und ich habe Beiträge, die die Muttern und Schrauben des Prozesses diskutieren gefunden:

Welche Überlegungen sollte ich in Bezug auf jede Phase (Testen, Staging, Produktion) anstellen? Sollten die Stufen auf verschiedenen physischen Servern bereitgestellt werden? Irgendwelche Tipps oder Ratschläge zum mehrstufigen Einsatz? Irgendwelche Haken, auf die ich achten sollte?

am besten,

Jacob

+1

Entschuldigung, ich musste die zwei Hyperlinks zu diesen Blogposts entfernen, um die Frage zu stellen. Jeder, der mehr darüber erfahren möchte, kann diese Elemente direkt zu den Posts leiten. – trisignia

+0

Warum mussten Sie die Hyperlinks entfernen? –

+1

Ich bin ein neuer Benutzer hier, und StackOverflow lässt mich noch keine Hyperlinks in meinen Fragen veröffentlichen. – trisignia

Antwort

0

Es ist besser, zwei verschiedene Server-Umgebungen haben: Staging und Produktion. Ich ignoriere immer die Testumgebung. Die Testumgebung verhält sich wie die Produktion, setzt die Datenbank jedoch zurück, wenn sie fertig ist. Das Ausführen auf demselben Server kann sich negativ auf die Leistung und Stabilität der Produktionsumgebung auswirken. Das Aktualisieren eines Edelsteins zum Testen in der Staging-Umgebung kann sich negativ auf die Produktion auswirken und Ausfallzeiten verursachen.

Sie müssen sehr wachsam sein, dass die gleichen Edelstein-Versionen auf beiden Servern sind. Es kann Probleme verursachen, wenn eine Version einer App im Staging funktioniert, aber aufgrund dieser Diskrepanz nicht in der Produktion ist.

Ich hätte immer ein Konsolenfenster geöffnet, das bereit ist, die letzte Bereitstellung zurückzusetzen, falls etwas schief geht. Es ist wirklich nicht viel mehr als das.

Sparen Sie sich etwas Geld und kaufen Sie den günstigsten Staging-Server, den Sie können. Du bist der einzige, der es benutzen wird, oder? Stellen Sie nur sicher, dass sie vom selben Anbieter stammen.

+0

Die Testumgebung ist keine Umgebung, in der Sie einen Server ausführen sollten. Es ist ausschließlich für die Verwendung in Ihren Geräte-, Funktions- und Integrationstests vorgesehen. Die meisten Leute "runnen" dies auf ihrer Entwicklungsbox, da Sie Ihre Tests vor dem Einchecken eines neuen Codes ausführen sollten. –

1

Ich habe immer nur Kappe Aufgaben erstellt für jedes deploy Ziel und verwenden sie in der Befehlszeile:

# deploy.rb 
task :stage do 
    server 10.0.0.1 ... 
end 

> cap stage deploy 

Sie können festlegen, auch Aufgaben innerhalb der einzelnen Zielaufgabe anpassen, wie ein deploy, die Bereinigung funktioniert in Inszenierung, aber nicht in der Produktion.

Da diese Deploy-Zielaufgaben selten sehr groß sind, habe ich nie wirklich den Sinn einer Installation der Cap-Erweiterungen für Multi-Stage gesehen, aber ich nehme an, die Situationen anderer können sich unterscheiden.

Ich denke, dass die Produktion von Ihren anderen Umgebungen getrennt sein sollte, da sonst die Gefahr besteht, dass sich fehlerhafte Prozesse im Staging oder dergleichen auf die Produktionsleistung auswirken.

Manchmal definiere ich Cap-Tasks, um das Staging einfacher zu gestalten, z. B. um die Datenbank auszulöschen und sie vom letzten Produktions-Dump neu zu laden. Diese Aufgaben sollten ihr Bereitstellungsziel über eine festgelegte Variable oder Ähnliches überprüfen und sich weigern, für die Produktion als Versicherung gegen einen Spätnachtypo zu laufen.

Es ist verlockend, eine Menge benutzerdefiniertes Verhalten in Ihre deploy.rb zu bringen, aber ich habe festgestellt, dass dies dazu führt, dass sich Ihre Umgebung oder die Cap-APIs ändern.

Eine weitere Übung, die ich bei größeren Umgebungen gesehen habe, ist ein Shell-Konto mit einem Checkout, das den stabilen Zweig verfolgt, der speziell als Kontrollpunkt für Capistrano eingerichtet wurde. Sie ssh in und führen Sie cap-Befehle statt lokal aus. Dies kann helfen, Probleme zu vermeiden, bei denen die deploy.rb Ihrer lokalen Kasse Änderungen aufweist, die Sie nicht für die Bereitstellung in der Produktion verwenden können. Dies ist weniger ein Problem mit git vs svn, aber dennoch muss man sorgfältig überlegen, was ihre lokale deploy.rb in dem Moment ist, in dem sie cap-Befehle ausführen.

Heroku macht dieses Zeug heutzutage wirklich einfach, und EY und andere sind nicht gerade weit entfernt.

0

Seit über einem Jahr nutzen wir den mehrstufigen capistrano-Einsatz sehr erfolgreich. Das System trennt die Deployment-Dateien für jede Stufe auf nahezu identische Weise mit den Rails-Umgebungsdateien. Es war sehr einfach einzurichten und zu verwalten.

Verwandte Themen