2016-06-26 4 views
0

Die folgende Aufgabe ist in einer deploy.rb, die zwei Shell-Skripte auf dem Server ausführen.capistrano 3.5 Task ausführen wie catch ungleich Null Ergebnis

task :setup_nginx do 
    on roles(:app) do 
    execute "sudo /usr/local/sbin/setup_nginx.sh" 
    execute "sudo /usr/local/sbin/ctl_nginx.sh restart" 
    end 
end 

Wie kann ich überprüfen, ob eine dieser Skript fehlschlägt (gibt einen Wert ungleich Null) und apropriate Maßnahmen ergreifen? Was ich tun möchte, ist die Ausführung mit einer Fehlermeldung zu stoppen.

Antwort

1

Wie Sie wahrscheinlich bereits wissen, löst execute automatisch eine Ausnahme aus und stoppt die Bereitstellung, wenn ein Nicht-Null-Beendigungsstatus erkannt wird. Dieses Verhalten ist normalerweise "gut genug", solange Sie immer erwarten, dass die Befehle erfolgreich ausgeführt werden, und alle Fehler bedeuten, dass etwas sehr Schlechtes passiert ist.

Wenn Sie jedoch nicht sicher sind, ob ein Befehl erfolgreich oder fehlgeschlagen ist und Sie Fehlerfälle ordnungsgemäß behandeln möchten, verwenden Sie test anstelle von execute.

test wird basierend auf dem Exit-Status einen booleschen Wert zurückgeben. Wenn der Beendigungsstatus Null ist (d.h. erfolgreich), wird true zurückgegeben; Für Nicht-Null wird false zurückgegeben.

Zum Beispiel:

task :setup_nginx do 
    on roles(:app) do 
    if test "sudo /usr/local/sbin/setup_nginx.sh" 
     # do something on success 
    else 
     # do something different on failure 
    end 
    end 
end 

Dokumentation:

https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#make-a-test-or-run-a-command-which-may-fail-without-raising-an-error

Der test() Befehl verhält sich genau die gleichen wie jedoch falsch zurückkehren wird ausgeführt, wenn der Befehl endet mit einem Nicht-Null-Ausgang (wie man 1 test tut). Wenn es boolesch zurückgegeben wird, kann es verwendet werden, um den Steuerfluss innerhalb des Blocks zu steuern.

Verwandte Themen