2013-08-29 12 views
5

Ho il seguente codice nel mio script ...Rubino salvataggio e riprovare blocco di codice specifico

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 

La mia domanda è che cosa retry in realtà sta per "riprovare". Se lo script ha già generato 1000 e-mail in un ciclo e ne ha inviato 999 in un altro ciclo, e quindi si invia l'e-mail 1000. Riprova la riga di codice specifica su cui ha rilevato l'errore, inizierà il ciclo oltre alla millesima e-mail, inizierà l'intero ciclo o inizierà all'inizio dello script che attraversa entrambi i loop?

Sto usando Ruby 1.9.3.

risposta

10

retry eseguirà il blocco interabegin, così nel tuo caso tutte i loop di posta elettronica verrà eseguito di nuovo.

Ecco un rapido esempio, che stamperà interi da 1 a 7 in modo continuo (terminare con CTRL-C, in quanto sarà Infinite Loop):

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

Buono a sapersi. Grazie per l'aiuto. – Luigi

+3

Ecco un ottimo post sull'uso di 'retry' in un loop http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception-in-ruby / – dennismonsewicz

Problemi correlati