酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

open-uriにtimeout(タイムアウト/時間制限)を追加する[Ruby]

Eye Catch Image

Open-URIでデータを取得する際に、一定時間以上取得できない場合に問い合わせを諦めるための制御です。ごくごくシンプルなプログラムですが、個人的によく使うのでメモ。


ソースコード

ソースコードは以下の通り。

1
2
3
4
5
6
7
8
9
10
11
12
13
require 'open-uri'
require 'resolv-replace'
require 'timeout'

TIME_OUT = 3

begin
  timeout(TIME_OUT) { open(URI.encode(url), "r", {:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) }
rescue TimeoutError => e
  # timeout時の例外処理
rescue => e
  # timeout以外の例外処理
end
  • resolv-replaceライブラリ: ホスト名解決にresolvライブラリを使うようにする(DNS検索でのタイムアウトを実現するため)
  • resolvライブラリ: DNSと連携した名前解決のためのライブラリ
  • TimeoutError: タイムアウト時のエラー

Special Thanks

open-uriにtimeoutを設定する方法 | Memorandum

おすすめの書籍