2014-01-14 9 views
5

In Capistrano 2.x Sie einfach hinzufügen konnte: on_error =>: so weitermachen:Wie geht es weiter, wenn Skript (Fehler) ausfällt und erfassen die Ausgabe mit Capistrano 3

task :bad_script, :on_error => :continue do 
    my_error = capture('/path/to/tomcat/shutdown.sh') 
end 

Ich sehe keine Möglichkeit, dies in Capistrano 3.x oder ssh-kit (die zugrunde liegende Kommunikation) zu tun. Jede Hilfe wäre willkommen.

task :bad_script do 
    server_is_down 
    on roles :all do 
     begin 
     server_is_down = capture('/path/to/tomcat/shutdown.sh') 
     rescue 
     #do something if server_is_down has the correct text 
     end 
    end 
    end 
end 

Ich habe versucht, die neue Art und Weise umgibt, in beginnen/Blöcke Rettung aber nur stoppt sie von erroring aber nicht die Ausgabe von dem Fehler zurück.

Ich würde immer noch gerne wissen, wie das geht, aber ich habe einen Weg gefunden, es für meinen einen Fall zu brauchen, und das ist nur Server zu setzen, wenn es fehlschlägt.

task :bad_script do 
    server_is_down = false 
    on roles :all do 
     begin 
     execute('/path/to/tomcat/shutdown.sh') 
     rescue 
     server_is_down = true 
     end 
    end 
    end 
end 

Das setzt voraus, dass es nur Fehler, wenn die Abschaltung erfolgt.

Antwort

0

Die Ausgabe von capture wird nur zurückgegeben, wenn diese Methode nicht fehlschlägt. Wenn eine Ausnahme ausgelöst wird, gibt es keine Möglichkeit, einen Wert zurückzugeben (da die Ausnahmebehandlung die Kontrolle übernehmen wird). Um also eine Antwort vom Capture-Befehl zu erhalten, müssen Sie entweder den Wert zurückgeben, den Sie als Teil der ausgelösten Exception benötigen, oder keine Exception auslösen, und nur einen Fehlercode (plus die Daten, die Sie benötigen) zurückgeben müssen erhalten).

+0

Von dem, was ich sehe in https://github.com/capistrano/sshkit/blob/7f779a9a24fcc7fae179a20a652429e4bac454fa/lib/sshkit/backends /netssh.rb, sollte es keine Ausnahmen auslösen –

+0

Von https://github.com/capistrano/sshkit/blob/52797aeecc07190ca47ec5c3315243cd95b568fd/EXAMPLES.md „Execute und einen Fehler auslösen, wenn etwas schief geht auf Hosts zu tun | host | ausführen! (: echo, '"Beispiel Nachricht!" 1> & 2; false') Ende Dies wird SSHKit :: Command: Failed mit der # Nachricht "Example Message!" ', Die den Befehl zum Abbruch führen wird. –

+0

Ich habe keine Kontrolle über die ausgelöste Ausnahme, also wie würde ich einen Wert in dieser Ausnahme zurückgeben? Ich bekomme, wie Capture funktioniert, ich möchte, dass es etwas zurückgibt, wenn es scheitert. Es gibt viele Gründe, warum ein Skript nicht funktionieren würde, ich würde nach einem bestimmten suchen und etwas machen, wenn es diesen "Fehler" hat. –

1

Sie können den Fehler unterdrücken und leitet stderr auf eine Variable wie folgt aus:

capture('output_from_tomcat_shutdown=`/path/to/tomcat/shutdown.sh 2>&1` || echo $output_from_tomcat_shutdown') 
Verwandte Themen