ruby超时无法使用外部URL

时间:2013-06-07 02:18:13

标签: ruby

以下代码应在1秒后引发Timeout :: Error。它虽然不会在1秒后升高。它会在url实际超时后引发。我想弄明白为什么。

Timeout::timeout(1) { Net::HTTP.get('bogusurlaaaaa.com','index.html') }

$ ruby​​ -v

ruby 1.9.2p320

我没有使用具有“绿色线程”问题的1.8.7。所以我不应该需要SystemTimer gem

这有效:

Timeout::timeout(1) { sleep(20) }

我的假设是net / http使用了一些系统库,并且ruby超时线程在1秒后无法杀死它?只是一个猜测。

任何帮助表示赞赏!我也使用Mechanize来做get,但是我使用net / http我也相信并且遇到了同样的问题。

注意:我在mac(10.8.2)和ubuntu(12.04)上通过irb执行此操作

注意:如果您多次测试,则需要在每次测试时将bogusurl更改为其他内容,否则虚假的将被缓存,您将得到快速响应。

1 个答案:

答案 0 :(得分:0)

我已经尝试过你的代码,它对我有用。我的红宝石是1.9.3-p327,你可以更新你的红宝石版本并再试一次。

或者您可以尝试以下方法:

  Net::HTTP.start('bogusurlaaaaa.com', open_timeout: 1, read_timeout: 1){|h| h.get '/'}