Net :: HTTP.get发生奇怪的Ruby错误

时间:2010-11-15 03:04:34

标签: ruby http

我有以下Ruby代码:

require 'net/http'
require 'uri'

include Net

$DEBUG = 1

print "Enter a GitHub username: "
username = gets

puts "Username = #{username}" if $DEBUG == 1

source = HTTP.get(URI.parse("http://github.com/api/v2/xml/user/show/#{username}"))

puts source if $DEBUG == 1

每当我运行它时,我都会收到以下错误:

Exception `Errno::EAGAIN' at /usr/local/lib/ruby/1.9.1/net/protocol.rb:135 - Resource temporarily unavailable - read would block

即使它工作正常。关于为什么会发生这种情况以及如何阻止它发生的任何想法?

提前致谢!

编辑:使用htty,我能够连接到所需的服务器并获得资源,没有任何错误。

2 个答案:

答案 0 :(得分:6)

我的猜测是你使用全局$DEBUG变量揭示了Net :: Protocol中的错误或不受欢迎的状态。如果您设置$DEBUG = false,它就会消失。

在Net :: Protocol代码中,它正在尝试执行非阻塞读取,并且似乎是超时。

Ruby使用$ DEBUG标志作为-d机制的一部分。如果您将puts $DEBUG放入脚本并运行它,您将看到该变量切换。因为它是全局的,所以在任何需要调试的代码中都可以看到它,所以你或代码的作者可以触发特殊的冗长来帮助调试:

greg-mbp-wireless:Desktop greg$ ruby untitled.rb 
false
greg-mbp-wireless:Desktop greg$ ruby -d untitled.rb 
true

答案 1 :(得分:1)

这是你的$ DEBUG = 1,如果没有定义$ DEBUG(或设置为false),则没有错误。可能Ruby解释器在内部使用它,如果设置它会打印出调试信息。