Nginx Neustart der Rails App mit Capistrano

8

Für das Leben von mir kann ich nicht herausfinden, wie man das richtig macht.

Das Problem ist ähnlich wie bei anderen: Wie man einen Haufen von Mongrels wieder ins Rollen bringt

Wir verwenden jedoch Nginx / Passenger statt Mongrel.

Das Problem tritt bei einer Bereitstellung auf, wenn wir diesen Standard verwenden: Aufgabe neu starten:

%Vor%

Es berührt die Datei restart.txt auf jedem Webserver, aber alle Passagierinstanzen, die gerade Anfragen bedienen, müssen fertig sein, bevor die neuen erscheinen. Dies verursacht eine ernsthafte Verzögerung und führt dazu, dass unsere App für bis zu 2 Minuten nicht verfügbar ist, während alles wieder hochfährt.

Um das zu umgehen, ist folgendes geplant:

  1. Bereitstellen von Code
  2. Gehen Sie zu Server 1, entfernen Sie ihn aus dem Load Balancer
  3. starte nginx-passagier auf Server 1 neu
  4. warte 60 Sekunden
  5. fügen Sie Server 1 dem Load Balancer
  6. hinzu
  7. gehe zu Server 2 (wiederhole die Schritte 3 - 5)

Um dies zu erreichen, habe ich Folgendes versucht:

(lb.txt ist die Datei, nach der der Load Balancer sucht)

%Vor%

Dieses fast funktioniert jedoch während der Bereitstellung so, als würde es die Schleife einmal pro Server in der app-Rolle durchlaufen. Wir haben derzeit 6 App-Server, also läuft die Schleife 6 Mal und startet nginx-passagier 6 Mal pro Server neu.

Ich brauche nur diese Schleife, um einmal durchzulaufen.

Ich weiß, dass es scheint, dass der Passagier wieder in Schwung kommt, aber sie scheinen noch nicht zu existieren.

Wenn es hilft, verwenden wir Capistrano 2.x und Rails 3

Jede Hilfe wäre großartig.

Danke.

    
nduro 07.07.2011, 15:15
quelle

2 Antworten

6
%Vor%

sollte eigentlich sein:

%Vor%     
Archite 15.07.2011, 17:15
quelle
2

Ich bin über diesen Edelstein capify-ec2 gestolpert, der eine Roll-Neustart-Funktion hat. capify-ec2 auf github.

Ich bin dabei, es zu installieren und es auszuprobieren.

Hier ist die Beschreibung aus der Readme, die beschreibt, was ihre Rolling-Neustart-Funktion tut:

"Mit dieser Funktion können Sie Ihren Code nacheinander und nicht gleichzeitig auf Instanzen bereitstellen. Dies wird für komplexere Anwendungen nützlich, die nach einer Bereitstellung möglicherweise länger zum Start benötigen. Capistrano führt eine vollständige Bereitstellung aus (einschließlich benutzerdefinierter Befehle) hooks) für eine einzelne Instanz, führen Sie optional eine HTTP-Überprüfung der Integrität der Instanz durch und fahren Sie dann mit der nächsten Instanz fort, wenn die Bereitstellung erfolgreich war.

Nach der Bereitstellung wird ein Statusbericht angezeigt, der angibt, auf welchen Instanzen die Bereitstellung erfolgreich war, fehlgeschlagen ist oder nicht gestartet wurde. Bei einigen Fehlern müssen möglicherweise weitere Maßnahmen manuell ergriffen werden. Wenn beispielsweise eine Instanz aus einem ELB entfernt wird (siehe Abschnitt 'Verwendung mit Elastic Load Balancers') und die Bereitstellung fehlschlägt, wird die Instanz aus Sicherheitsgründen nicht erneut bei der ELB registriert. "

    
Danny 19.05.2013 02:41
quelle