2010-11-15 6 views
2

J'ai le code Ruby suivant:étrange erreur Ruby avec 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 

Chaque fois que je le lance, je reçois l'erreur suivante:

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

Même si cela fonctionne très bien . Des idées sur la raison pour laquelle cela arrive et comment l'arrêter?

Merci d'avance!

EDIT: En utilisant htty, j'ai pu me connecter au serveur souhaité et obtenir la ressource sans erreur.

+0

Votre code a fonctionné pour moi comme il est, Ruby 1.8. 7/Linux –

Répondre

6

Je suppose que votre utilisation de la variable globale $DEBUG révèle un bug ou un état indésirable dans Net :: Protocol. Si vous définissez $DEBUG = false, il disparaît. À ce stade du code Net :: Protocol, il essaie de faire une lecture non bloquante et semble expirer. Ruby utilise le drapeau $ DEBUG dans le cadre du mécanisme -d

Si vous mettez puts $DEBUG dans un script et que vous l'exécutez, vous verrez cette variable basculer. Parce qu'il est un mondial, il sera visible dans tout code besoin débogage si vous ou l'auteur du code, peut déclencher verbosité extra-spécial pour aider les choses de débogage:

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

Oui, c'était ça, merci! –

1

C'est votre $ DEBUG = 1, si $ DEBUG n'est pas défini (ou vaut false) il n'y a pas d'erreur. Probablement l'interpréteur Ruby l'utilise en interne et s'il est activé, il affiche les informations de débogage.