【问题标题】:ruby timeout not working with external url红宝石超时不适用于外部网址
【发布时间】:2013-06-07 02:18:12
【问题描述】:

下面的代码应该在 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 进行获取,但我相信这使用了 net/http 并且遇到了同样的问题。

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

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

【问题讨论】:

  • 你试过在 ruby​​ 2.0.0 上运行吗?
  • 是的,我的 ubuntu 实例使用 ruby​​ -v ruby​​ 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
  • 试试“www.youtube.com”。我以为是因为网址不好

标签: ruby


【解决方案1】:

我试过你的代码,它对我有用。我的 ruby​​ 是 1.9.3-p327,你可以更新你的 ruby​​ 版本再试一次。

或者你可以试试下面这个:

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

【讨论】:

  • 您是否尝试在每次测试中更改 bogusurl?我正在安装 1.9.3-p327 进行测试。请参阅上面有关 url 缓存的注释
  • 适用于我在 OSX 上的 ruby​​ 1.9.3p392
  • 是的,这个网址未知。
  • 你们可以试试这个吗:Timeout::timeout(1) { Net::HTTP.get('india-tours.org','index.html') }
  • ruby 1.9.3p194(2012-04-20 修订版 35410)[x86_64-darwin11.4.0] 也不起作用
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多