Как указать тайм-аут чтения для запроса Net:: HTTP:: Post.new в Ruby 2
У меня есть сообщение, которое происходит с приложением рельсов из ruby script. script создает запрос переменной как
request = Net::HTTP::Post.new(url.path)
который затем используется следующим образом
request.content_type = "application/json"
request.body = JSON.generate( params )
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
На сервере много обработки, и я получаю ошибку Net::ReadTimeout
Я попытался указать период ожидания
request.read_timeout = 500
как qaru.site/info/379444/..., но я получил
undefined method `read_timeout=' for #<Net::HTTP::Post POST> (NoMethodError)
ошибка. Я предполагаю, что я что-то пропустил где-то. Все подсказки с благодарностью получили
Техническая информация:
- Ruby 2.0.0p247
- Rails 4.0.0
- Windows 7 32-bit ruby
Ответы
Ответ 1
Решено через fooobar.com/questions/379441/...
Я изменил свой
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
строка
response = Net::HTTP.start(url.host, url.port, :read_timeout => 500) {|http| http.request(request)}
и это, похоже, обошло эту проблему.
Ответ 2
read_timeout
доступен с простым объектом Net::HTTP
:
url = URI.parse('http://google.com')
http = Net::HTTP.new(url.host, url.port)
http.read_timeout = 5 # seconds
http.request_post(url.path, JSON.generate(params)) do |response|
# do something with response
p response
end
Ответ 3
Если кто-то все еще сталкивается с проблемой времени ожидания и Net::HTTP
тайм-аут работает не так, как ожидалось, вы также можете подходить к подходу:
begin
Timeout::timeout(10) {
####
## YOUR REQUEST CODE WILL BE HERE
####
}
rescue
408
end