[Ruby] rescue 節で retry を用いると begin 以下を再度実行してくれる
memo.
Contents
リトライで begin 節から再度実行する
retry は、rescue 節で begin 式をはじめからもう一度実行するのに使用します。 retry を使うことである処理が成功するまで処理を繰り返すようなループを作 ることができます。
num_attempts = 0
begin
num_attempts += 1
raise
rescue
sleep 3
puts "Retry #{num_attempts}"
retry
ensure
puts '終了'
end
強制終了させるまで止まらない。
指定回数リトライしてエラーを発生させる
強制終了させるまで無限ループになってしまうので、指定回数のリトライでエラーを発生させる。
MAX_ATTEMPTS = 3
num_attempts = 0
begin
num_attempts += 1
raise
rescue => e
if num_attempts <= MAX_ATTEMPTS
sleep 1
puts "Retry #{num_attempts}"
retry
else
puts e
raise
end
ensure
puts '終了'
end
XMLRPC::FaultException をキャッチしてリトライする
この場合は、XMLRPC::FaultException
を catch して retry
すればよいということになる。
Error: 0: Failed to invoke method switchStatus in class jp.co.nulab.backlog.service.XmlRpcService: "statusId" is invalid. May be other user has updated status.
具体的なコードサンプル。