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