2014-09-27 24 views
0

У меня возникли проблемы, когда хост, к которому я пытаюсь подключиться, не всегда доступен. Im используя этот бит кода, где им соединяясь к хозяину:Как установить таймаут для Net :: HTTP.start?

begin #To catch error from Net::HTTP 
net = Net::HTTP.new(uri.host, uri.port) 
net.read_timeout = 5 
net.continue_timeout = 5 
res = net.start {|http| 
    http_request = http.request(req) 
    case http_request.response 
     case 
      ... 
     else 
      @error_msg = "Response not handled by appliaction" << http_request.code << " " << http_request.message 
    end 
} 
rescue SocketError => se 
    @error_msg = "Net::SocketError #{se} (Perhaps host is down?)" 
    puts @error_msg 
end 

Проблема заключается в том, когда хозяин разве реагирует (или что-то еще не так) соединение, кажется, работает так долго. я надеялся на 5 секунд ожидания, но его пытается способ долго:

Completed 500 Internal Server Error in 126302ms 
Errno::ETIMEDOUT - Connection timed out - connect(2): 

Как я установить максимальное время ожидания для сети: HTTP объект?

Благодаря

ответ

0

Как Ascar отметил, что это неправильно синтаксис. Но: read_timeout самостоятельно не исправляет проблему, мне также нужно было добавить: open_timeout, если хост не ответил вообще.

Net::HTTP.start(uri.host, uri.port, {read_timeout: 5, opentimeout: 5}) 
+0

Не работает с Net :: SSH я получаю 'ArgumentError (неверный вариант (ы): read_timeout, opentimeout)' с рубином 2.3.3, нетто-SSH (4.2.0, 4.1.0, 4.0 0,1) –

2

Что вы делаете это поддерживаемый метод до ruby 1.8

Для ruby > 1.9 вы должны использовать его в качестве опции запуска.

Попробуйте это:

res = net.start(:read_timeout => 5) { |http| # your block } 

См Net:HTTP.start

Смежные вопросы