我有以下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
Run Code Online (Sandbox Code Playgroud)
每当我运行它时,我都会收到以下错误:
Exception `Errno::EAGAIN' at /usr/local/lib/ruby/1.9.1/net/protocol.rb:135 - Resource temporarily unavailable - read would block
Run Code Online (Sandbox Code Playgroud)
即使它工作正常.关于为什么会发生这种情况以及如何阻止它发生的任何想法?
提前致谢!
编辑:使用htty,我能够连接到所需的服务器,并获得资源,没有任何错误.
我的猜测是你使用全局$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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2656 次 |
| 最近记录: |