2010-11-15 61 views
2

我有以下Ruby代碼:使用Net :: HTTP.get奇怪的紅寶石錯誤

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

你的代碼工作對我來說就是紅寶石1.8。 7/Linux – 2010-11-15 03:22:18

回答

6

我的猜測是,您使用全局$DEBUG變量會暴露Net :: Protocol中的錯誤或不期望的狀態。如果你設置了$DEBUG = false它就會消失。

在Net :: Protocol代碼的那一點,它試圖做一個non_blocking讀取,並且似乎超時。

Ruby使用$ DEBUG標誌作爲-d機制的一部分。如果您將puts $DEBUG放入腳本並運行它,您將看到該變量切換。因爲它是一個全球性的,它會需要調試在任何代碼可見這樣,您或代碼的作者,可以觸發額外特別冗長外,以幫助調試東西:

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

是的,就是這樣,謝謝! – 2010-11-15 03:18:37

1

這就是你的$ DEBUG = 1,如果$ DEBUG沒有定義(或設置爲false)沒有錯誤。可能Ruby解釋器在內部使用它,如果它被設置,它會打印出調試信息。