Net::HTTP.get(URI.parse('http://www.baidu.com'))
如果执行这个请求的 server 不能上网,将会等待很行时间才报错,查了下源码有个@open_timeout,但是在 app 中覆盖了这个@open_timeout不生效,如何能短时间内报错呢,求解!!
rub 版本:ree1.8.7
这个好像是个难题,帮你顶。也许你可以自己程序中定时检查下。
~~这个好像是个难题,帮你顶。也许你可以自己程序中定时检查下。~~
ruby1.9 的话有 read_timeout 参数
read_timeout
例子一下:
Net::HTTP.start('www.twitter.com', open_timeout: 1, read_timeout: 1){|h| h.get '/'}
open_timeout 是建立连接的超时 read_timeout 是建立连接后读取数据的超时
open_timeout
#4 楼 @luikore open_timeout: 1, 这个写法是新的么,后面带一个冒号。
#5 楼 @chenge 出来有 3 年多了吧... 相当于 :open_timeout => 1
:open_timeout => 1
#6 楼 @luikore 这个漂亮。我是有几年没接触 ruby 了。可读性更好了。
#4 楼 @luikore 呵呵,我在项目中 把 net/http 里边的 initialize 的 open_timeout,read_timeout 都给重新定义值了,好像没其作用。。。。。
@jiek85
通用解决方案
require 'timeout' timeout(2) { sleep 3 }