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.