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 № 1retry
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