アイデアは、あなたが何をしていたかが二度目に機能することを期待して、redo
またはを呼び出す前に何かを変更することです。retry
の例はありませんが、作業中のアプリケーションでのredo
使用法が見つかりました。retry
基本的に、外部(ネットワークなど)が原因で失敗する可能性のあるコードが少しあるが、コードを実行するたびに前提条件チェックを実行するとコストがかかりすぎる場合retry
は、begin...rescue
ブロックで使用できます。それが明確かどうかわからないので、例を正しく説明します。
基本的に、を使用してリモートディレクトリにアクセスするコードがいくつかありますNet:SFTP
。ディレクトリは存在するはずですが、一部の例外的なケースでは、まだ作成されていません。そこにない場合は、一度試してみてください。ただし、ネットワークアクセスを実行してディレクトリが毎回存在するかどうかを確認するのは、特に例外的な場合にのみディレクトリが存在しないため、コストがかかりすぎます。したがって、次のようにします。
tried_mkdir = false
begin
# Attempt to access remote directory
...
rescue Net::SFTP::StatusException
raise if tried_mkdir
tried_mkdir = true
# Attempt to make the remote directory
...
retry
end