2013-08-29 13 views
5

Ich habe den folgenden Code in meinem Skript ...Ruby-Rettungs- und versuchen Sie es erneut spezifische Codeblock

begin 
    #Loop to create 1000 emails... 
    #Loop to send 1000 emails... 

    rescue Timeout::Error => e 
    retry_attempts += 1 
    if retry_attempts < 10 
     retry 
    else 
     puts "Timeout error, deleting emails...".red 
     logs.puts("Rescued a timeout error...#{e}") 
     email_ids_all.each do |email_delete| 
     #delete all email... 
     end 

Meine Frage ist, was retry tatsächlich zu „wiederholen“ wird. Wenn das Skript bereits 1000 E-Mails in einer Schleife generiert und 999 davon in einer anderen Schleife gesendet hat und dann beim Senden der 1000. E-Mail das Zeitlimit überschritten hat - Wird die spezifische Codezeile, bei der der Fehler aufgetreten ist, erneut gestartet, wird die Schleife gestartet Wird mit der 1000. E-Mail die gesamte Schleife gestartet oder beginnt sie am Anfang des Skripts, das durch beide Schleifen läuft?

Ich verwende Ruby 1.9.3.

Antwort

10

retry den gesamtebegin Block, so in Ihrem Fall all die E-Mail-Schleifen wieder laufen auszuführen.

Hier ist ein kurzes Beispiel, die kontinuierlich die ganzen Zahlen 1 bis 7 gedruckt werden (beenden mit CTRL-C, wie es Schleife unendlich wird):

begin 
    (1..10).each do |x| 
    puts x 
    if x > 6 
     STDIN.gets # press enter to do another iteration 
     raise ArgumentException 
    end 
    end 
rescue 
    retry # loop will restart from 1 
end 
+0

Gut zu wissen. Danke für die Hilfe. – Luigi

+3

Hier ist ein wirklich guter Beitrag zur Verwendung von 'retry' in einer Schleife http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception-in-ruby / – dennismonsewicz

Verwandte Themen