jugyo.wordpress.com

Yet another jugyo's blog

ruby で http のタイムアウトを延ばす

with one comment

ruby で http による通信を行う場合、サーバから一定秒数(デフォルト 60秒)レスポンスが返ってこないとタイムアウトエラーが発生する。
以下のように read_timeout を変更することでタイムアウトの秒数を延ばすことができる。

Net::HTTP.start('hoge.com', 80) {|http|
  http.read_timeout = 120
  ...
}

でも例えば、アプリケーション全体でこの read_timeout を変えたくなったりした場合、毎回「read_timeout = 120」とか書くのは面倒くさい。
しかも open-uri の open メソッドなんかを使ってる場合、http なんか出てこない(意識しない)から read_timeout を設定しようがない。

read_timeout は HTTP クラスのコンストラクタの中でデフォルト値として 60秒に設定されている。
これをなんとかして任意の値に変えることはできないかな。

できた。

class Net::HTTP
  def initialize_new(address, port = nil)
    initialize_old(address, port)
    @read_timeout = 120
  end
  alias :initialize_old :initialize
  alias :initialize :initialize_new
end

この処理をはじめに実行しておくとタイムアウトの秒数がデフォルトで 120秒になる。

けど、かなり強引。
はたしてこんなやり方でいいんだろうか。

Advertisements

Written by jugyo

September 21, 2007 at 19:23

Posted in Uncategorized

Tagged with ,

One Response

Subscribe to comments with RSS.

  1. […] ruby で http のタイムアウトを延ばす « jugyo.wordpress.com. This entry was posted in ruby. Bookmark the […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s

%d bloggers like this: