2013-08-29 23 views
5

yeniden denemek Senaryomun aşağıdaki kodu var ...Yakut kurtarma ve özel kod bloğunu

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 

Sorum retry aslında "yeniden deneme" gidiyor budur. Komut dosyası bir döngüde 1000 e-posta oluşturduysa ve başka bir döngüde 999 gönderdiyse ve 1000. e-postayı göndermeye karar verdiyse - Hatayla karşılaştığı belirli bir kod satırını yeniden dener mi, döngü başlayacak mı? 1000'inci e-postayla birlikte, tüm döngüyü baştan başlayacak mı yoksa her iki döngüde çalışan komut dosyasının başlangıcında mı başlayacak?

Ruby 1.9.3 kullanıyorum. Senin durumunda eposta döngüler yeniden yayınlanması için tüm kadar

cevap

10

retry, tümbegin bloğu çalıştırır.

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

Yararlı bilgiler:

İşte (o döngü sonsuz gibi CTRL-C ile sona) sürekli 7'ye kadar 1 tamsayıları yazdırır hızlı bir örnek, bu. Yardım için teşekkürler. – Luigi

+3

İşte bir döngü içinde 'yeniden deneme' kullanma hakkında gerçekten iyi bir yazı http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception-in-ruby / – dennismonsewicz