« w3mのUTF8表示で表示ズレ Main ETCマイレージサービスの登録フ... »

Ruby Mechanizeでタイムアウト

RubyのMechanizeでデータ取得をしていたら、次のようにEOFErrorが発生する。

/usr/local/rvm/gems/ruby-1.9.3-p374/gems/net-http-persistent-2.8/lib/net/http/persistent.rb:959:in 
  `rescue in request': too many connection resets (due to end of file reached - EOFError) 
  after 0 requests on 21405360, last used 1394984831.0672119 seconds ago (Net::HTTP::Persistent::Error)
        from /usr/local/rvm/gems/ruby-1.9.3-p374/gems/net-http-persistent-2.8/lib/net/http/persistent.rb:968:in `request'
        from /usr/local/rvm/gems/ruby-1.9.3-p374/gems/mechanize-2.7.1/lib/mechanize/http/agent.rb:257:in `fetch'
        from /usr/local/rvm/gems/ruby-1.9.3-p374/gems/mechanize-2.7.1/lib/mechanize.rb:431:in `get'

データ取得に失敗しているのかと、Mechanizeのagentの設定でtime_out値を増やせばいいかとも思ったが、そちらではなくkeep_aliveがtrueになっているとタイムアウトになった際にEOFErrorになってしまうため、keep_alive=falseとするといいらしい(エラーメッセージにある「too many connections」はkeep_aliveに関連して発生するものか?)。

Rubyのバージョンは1.9.3だが、更新したほうがいいのかも?

Leave a comment

Your comment