我有以下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,我能够连接到所需的服务器并获得资源,没有任何错误。
答案 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解释器在内部使用它,如果设置它会打印出调试信息。