Странная ошибка Ruby с Net :: HTTP.get - PullRequest
2 голосов
/ 15 ноября 2010

У меня есть следующий код 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 ]

6 голосов
/ 15 ноября 2010

Я предполагаю, что использование вами глобальной переменной $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 голос
/ 15 ноября 2010

Это ваш $ DEBUG = 1, если $ DEBUG не определен (или не установлен в false), ошибок нет. Вероятно, интерпретатор Ruby использует это внутренне, и если он установлен, он выводит отладочную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...