/ / 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 実際には「再試行」します。 スクリプトがすでに1つのループで1000のEメールを生成し、別のループで999のEメールを送信した後、1000番目のEメールを送信するとタイムアウトします。エラーが発生した特定のコード行を再試行します。 1000回目のEメールで、ループ全体をやり直すのでしょうか。それとも、両方のループを実行するスクリプトの先頭から始めるのでしょうか。

私はruby 1.9.3を使っています。

回答:

回答№1の場合は10

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