LoginSignup
1
0

More than 5 years have passed since last update.

RubyでErrno::EXXXを例外補足できない場合の対処法

Last updated at Posted at 2018-03-23

ご注意(補足)

コメントでご指摘が有りましたので、誤解のないように補足いたします。
こちらの記事はあくまで「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

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0