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秒になる。
けど、かなり強引。
はたしてこんなやり方でいいんだろうか。
