Ich habe Probleme mit Timeouts, die unter JRuby (Linux) nicht zuverlässig funktionieren. Genauer gesagt, wenn ich eine HEAD-Anfrage an einen entfernten Server sende und dieser Server beschäftigt ist (antwortet nicht), wird das konfigurierte Zeitlimit nicht ausgelöst und meine Anwendung bleibt lange stehen. Ich habe versucht, beide, das Setzen von read_timeout
und mit Hilfe der timeout()
Funktion aber keiner arbeitete zuverlässig:Zuverlässiges JRuby-Timeout für HTTP-Anfragen
Timeout::timeout(5) do
Net::HTTP.start(uri.host, uri.port) do |http|
http.read_timeout = 5
http.request_head(uri.request_uri)
end
end
für Ruby dieses Problem ausführlich auf der Seite SystemTimer dokumentieren wird. Das vorgeschlagene SystemTimer-Juwel kann jedoch nicht mit JRuby verwendet werden.
Hat jemand eine Idee, wie man zuverlässige Timeouts für HTTP-Anfragen in JRuby bekommt?
PS: Dies ist JRuby 1.1.6/32-Bit-Linux/Sun Java 1.6
Vielen Dank für Ihre Antwort zu tun. Das behebt das Problem, obwohl ich wegen der vielen (scheinbar harmlosen) openssl-bezogenen Warnungen und einem eklatanten Zeichencodierungsproblem mit Hpricot nicht bereit war, ein Upgrade durchzuführen: http://jira.codehaus.org/browse/JRUBY-3732 – Pankrat