/ / Ruby Rescue and Retry Block Code spécifique - Ruby, Loops, Rescue

Ruby rescue et réessayez le bloc de code spécifique - ruby, loops, rescue

J'ai le code suivant dans mon script ...

  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

Ma question est quoi retry va en fait "réessayer". Si le script a déjà généré 1000 e-mails dans une boucle et envoyé 999 d'entre eux dans une autre boucle, puis qu'il expire lors de l'envoi du 1000e e-mail - Va-t-il réessayer la ligne de code spécifique sur laquelle il a rencontré l'erreur, va-t-il démarrer la boucle terminé avec le 1000 e-mail, recommencera-t-il la boucle entière, ou commencera-t-il au début du script passant par les deux boucles?

J'utilise ruby ​​1.9.3.

Réponses:

10 pour la réponse № 1

retry va exécuter le tout begin bloquer, donc dans votre cas tout les boucles de messagerie s'exécuteront à nouveau.

Voici un exemple rapide, qui imprimera les entiers 1 à 7 en continu (se terminera par CTRL-C, car il fera une boucle infinie):

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