У моєму сценарії є такий код ...
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
Моє питання в тому, що retry
фактично збирається "повторити спробу". Якщо скрипт вже згенерував 1000 електронних листів в одному циклі і надіслав 999 з них в інший цикл, а потім закінчився час при відправленні 1000-го повідомлення електронної пошти - Чи буде він повторювати конкретний рядок коду, в якому він зіткнувся з помилкою, чи почне цикл з 1000-м повідомленням електронної пошти, він буде запускати весь цикл заново, або почнеться на початку сценарію, що проходить через обидва цикли?
Я використовую ruby 1.9.3.
Відповіді:
10 за відповідь № 1retry
виконає цілий begin
блокувати, тож у вашому випадку все цикли електронної пошти знову запустяться.
Ось короткий приклад, який буде друкувати цілі числа від 1 до 7 безперервно (закінчується CTRL-C, оскільки це буде нескінченним циклом):
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