ご注意(補足)
コメントでご指摘が有りましたので、誤解のないように補足いたします。
こちらの記事はあくまで「RubyでErrno::EXXXを例外補足できない場合」の対処法なので、
この方法をスタンダードとして推奨するものではありません。
本来であれば以下のように rescue Errno::EXXX => ex
で補足できるはずです。
begin
# Something to do
rescue Errno::ECONNRESET => ex
# Something to do
end
しかし、その方法では補足されない状況が発生しており、
調べた結果、一つの解決策が見つかりましたのでこの記事を作成いたしました。
考えられる原因や他の解決策をご存知のかたいらっしゃいましたら、
ぜひコメント頂けますと幸いです。
概要
Capybara + Poltergeistで自動ブラウザ操縦を実装していた際、
Windows環境でだけ、一定時間経過すると Errno::ECONNRESET
が発生する状態になっていた。
作っているものの特性上、それは問題ないので例外補足してリトライさせようとしたが、
rescue Errno::ECONNRESET => e
では補足されずにつまりました。
お恥ずかしや、おそらく基本中の基本っぽいが知りませんでした。
対処法
rescue Errno::ECONNRESET => e
で補足せず、
rescue Exception => ex
でつかまえて、その中で処理を分岐させる。
begin
# Something to do
rescue Exception => ex
case ex
when Errno::ECONNRESET
# Something to do
end
end
参考
ruby - How to catch Errno::ECONNRESET class in "case when"? - Stack Overflow