Ruby Net::OpenTimeout:执行已过期 [英] Ruby Net::OpenTimeout: execution expired

查看:26
本文介绍了Ruby Net::OpenTimeout:执行已过期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的机器上的多个主机上一直出现此错误,例如:

I'm consistently getting this error on several hosts on my machine, e.g.:

require 'open-uri'
open('https://google.com').read


Net::OpenTimeout: execution expired
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:904:in `initialize'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:904:in `open'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:904:in `block in connect'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/timeout.rb:103:in `timeout'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:902:in `connect'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:887:in `do_start'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/net/http.rb:876:in `start'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:323:in `open_http'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:741:in `buffer_open'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:212:in `block in open_loop'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:210:in `catch'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:210:in `open_loop'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:151:in `open_uri'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:721:in `open'
    from /usr/local/opt/rbenv/versions/2.4.0/lib/ruby/2.4.0/open-uri.rb:35:in `open'
    from (irb):3
    from /usr/local/opt/rbenv/versions/2.4.0/bin/irb:11:in `<main>'

不会发生在其他人身上,例如

Doesn't happen on others such as

open('https://twitter.com').read

来自 rbenv 和 macOS 10.12.3 的 Ruby 2.4.0.还使用 Ruby 2.0.0(macOS 上的系统版本)进行了测试.

Ruby 2.4.0 from rbenv and macOS 10.12.3. Tested also with Ruby 2.0.0 - the system version on macOS.

当我curl 或使用Node 的request 时,我没有收到错误和预期的结果.所以这不是一个被封锁的主机,我的 IP 也没有被封锁.

I get no error, and expected results when I curl or use Node's request. So this is not a blocked host, and my IP isn't blocked either.

尝试重新安装 Ruby,重新启动机器,问题仍然存在.

Tried to reinstall Ruby, restart machine, and issue still occurs.

有什么指点吗?

推荐答案

看起来是 Ruby 如何解析 DNS 的问题.

Looks like it's a an issue with how Ruby resolves DNS.

添加了require 'resolv-replace',现在它会立即打开连接.

Added require 'resolv-replace' and now it's opening connections immediately.

来源:https://stackoverflow.com/a/27485369/116925https://github.com/ruby/ruby/pull/597#issuecomment-40507119

这篇关于Ruby Net::OpenTimeout:执行已过期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆