Ошибка обработки тайм-аута - PullRequest
13 голосов
/ 07 апреля 2011

После использования тайм-аута:

 status = Timeout::timeout(5) {
  # Something that should be interrupted if it takes too much time...
}

Я получил эту ошибку тайм-аута:

/Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `initialize': execution expired (Timeout::Error)
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `open'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `block in connect'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/timeout.rb:87:in `timeout'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:644:in `connect'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
    from /Users/galharth/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:632:in `start'
    from /Users/galharth/.rvm/gems/ruby-1.9.2-p136/gems/mechanize-1.0.0/lib/mechanize.rb:527:in `fetch_page'
    from /Users/galharth/.rvm/gems/ruby-1.9.2-p136/gems/mechanize-1.0.0/lib/mechanize.rb:259:in `get'

Что мне делать?

Ответы [ 2 ]

27 голосов
/ 07 апреля 2011

Ну, это ожидаемое поведение Timeout.Если блок занимает слишком много времени, его выполнение прекращается и выдается исключение.

Возможно, вы захотите перехватить исключение и обработать его соответствующим образом:

require 'timeout'
begin
  status = Timeout::timeout(5) {
    # Something that should be interrupted if it takes too much time...
  }
rescue Timeout::Error
  puts 'That took too long, exiting...'
end
0 голосов
/ 26 декабря 2016
uri = URI.parse("https://example.com")
        # Full control
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true
        #http.read_timeout = 500
        request = Net::HTTP::Post.new(uri.request_uri)
        request.set_form_data({"locationcode" => "999", "sublocationcode" => "1"})
        response = http.request(request)
        render :json => response.body
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...