/ / Ruby порятунок і повторна спроба блоку коду - ruby, цикли, порятунок

Руби порятунку і спробуйте спробувати конкретний кодовий блок - рубій, петлі, рятувальні

У моєму сценарії є такий код ...

  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 за відповідь № 1

retry виконає цілий 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