How to change the Timeout::Error threshold for open_uri

When opening a particularly slow loading URL I am getting the following
error:

Loading production environment (Rails 2.0.2)

require ‘open-uri’
=> [“OpenURI”]

?> open(‘http://www.wwtdd.com/?start=2331’) { |f|
?> puts " Opened successfully with charset: " + f.charset

}
/usr/lib64/ruby/1.8/timeout.rb:54:in rbuf_fill': execution expired (Timeout::Error) from /usr/lib64/ruby/1.8/timeout.rb:56:intimeout’
from /usr/lib64/ruby/1.8/timeout.rb:76:in timeout' from /usr/lib64/ruby/1.8/net/protocol.rb:132:inrbuf_fill’
from /usr/lib64/ruby/1.8/net/protocol.rb:116:in readuntil' from /usr/lib64/ruby/1.8/net/protocol.rb:126:inreadline’
from /usr/lib64/ruby/1.8/net/http.rb:2029:in read_status_line' from /usr/lib64/ruby/1.8/net/http.rb:2018:inread_new’
from /usr/lib64/ruby/1.8/net/http.rb:1059:in request' ... 9 levels... from /usr/lib64/ruby/1.8/open-uri.rb:30:inopen’
from (irb):33:in irb_binding' from /usr/lib64/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from /usr/lib64/ruby/1.8/irb/workspace.rb:52

Does anyone know how to fix this? I want it to wait longer for the web
server to respond.

Shameless bump. Shoud I be posting on another forum?

Does anyone know how to fix this? I want it to wait longer for
the web server to respond.

Look in the docs/code and you shall find…

OpenURI wraps net/http and net/https

Looking in net/http finds these accessor methods:

# Seconds to wait until connection is opened.
# If the HTTP object cannot open a connection in this many seconds,
# it raises a TimeoutError exception.
attr_accessor :open_timeout

# Seconds to wait until reading one block (by one read(2) call).
# If the HTTP object cannot open a connection in this many seconds,
# it raises a TimeoutError exception.
attr_reader :read_timeout

Maybe that would help.

Mikel

Keith C. wrote:

When opening a particularly slow loading URL I am getting the following
error:

Loading production environment (Rails 2.0.2)

require ‘open-uri’
=> [“OpenURI”]

?> open(‘http://www.wwtdd.com/?start=2331’) { |f|
?> puts " Opened successfully with charset: " + f.charset

}
/usr/lib64/ruby/1.8/timeout.rb:54:in rbuf_fill': execution expired (Timeout::Error) from /usr/lib64/ruby/1.8/timeout.rb:56:intimeout’
from /usr/lib64/ruby/1.8/timeout.rb:76:in timeout' from /usr/lib64/ruby/1.8/net/protocol.rb:132:inrbuf_fill’
from /usr/lib64/ruby/1.8/net/protocol.rb:116:in readuntil' from /usr/lib64/ruby/1.8/net/protocol.rb:126:inreadline’
from /usr/lib64/ruby/1.8/net/http.rb:2029:in read_status_line' from /usr/lib64/ruby/1.8/net/http.rb:2018:inread_new’
from /usr/lib64/ruby/1.8/net/http.rb:1059:in request' ... 9 levels... from /usr/lib64/ruby/1.8/open-uri.rb:30:inopen’
from (irb):33:in irb_binding' from /usr/lib64/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from /usr/lib64/ruby/1.8/irb/workspace.rb:52

Does anyone know how to fix this? I want it to wait longer for the web
server to respond.

require ‘net/http’

Lengthen timeout in Net::HTTP

module Net
class HTTP
alias old_initialize initialize

    def initialize(*args)
        old_initialize(*args)
        @read_timeout = 3*60     # 3 minutes
    end
end

end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs