/ / Ruby resgatar e repetir bloco de código específico - ruby, loops, resgate

Ruby resgatar e repetir bloco de código específico - ruby, loops, resgate

Eu tenho o seguinte código no meu 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

Minha pergunta é o que retry está indo realmente "tentar novamente". Se o script já gerou 1000 e-mails em um loop e enviou 999 deles em outro loop, o tempo limite do envio do 1000º e-mail - ele tentará novamente a linha de código específica na qual encontrou o erro, iniciará o loop com o 1000º e-mail, iniciará o loop inteiro ou começará no início do script que está sendo executado nos dois loops?

Eu estou usando o ruby ​​1.9.3.

Respostas:

10 para resposta № 1

retry vai executar o inteira begin bloco, então no seu caso todos os loops de email serão executados novamente.

Aqui está um exemplo rápido, que irá imprimir inteiros 1 a 7 continuamente (terminar com CTRL-C, como loop infinito):

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