Теперь вылезает такая ошибка:
C:/Ruby22/lib/ruby/2.2.0/net/protocol.rb:153:in `read_nonblock': end of file reached (EOFError)
from C:/Ruby22/lib/ruby/2.2.0/net/protocol.rb:153:in `rbuf_fill'
from C:/Ruby22/lib/ruby/2.2.0/net/protocol.rb:134:in `readuntil'
from C:/Ruby22/lib/ruby/2.2.0/net/protocol.rb:144:in `readline'
from C:/Ruby22/lib/ruby/2.2.0/net/http/response.rb:39:in `read_status_line'
from C:/Ruby22/lib/ruby/2.2.0/net/http/response.rb:28:in `read_new'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1414:in `block in transport_request'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1411:in `catch'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1411:in `transport_request'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1384:in `request'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:1285:in `request_get'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:480:in `block in get_response'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:853:in `start'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:583:in `start'
from C:/Ruby22/lib/ruby/2.2.0/net/http.rb:478:in `get_response'
from prognoz.rb:27:in `<main>'
Пробовал гуглить, пишут что не с первого раза может дойти запрос. Попробовал несколько раз запустить в терминале прогу и на 4-й раз она запустилась. А можно избавиться совсем от этой проблемы?
Ну как ты, наверное, помнишь, можно схватить эту ошибку и в самой программе повторить запрос в случае, если ошибка именно EOFError
.
Можно дополнительно сделать счётчик retry_count
, чтобы программа не ушла в бесконечную отправку запросов.
MAX_RETRY_COUNT = 10
RETRY_DELAY = 2
retry_count = 0
begin EOFError
# Отправляем запрос по адресу uri и сохраняем результат в переменную response
response = Net::HTTP.get_response(uri)
rescue
if retry_count < MAX_RETRY_COUNT
sleep RETRY_DELAY
retry_count += 1
retry
else
raise
end
end
Если это проблема действительно на стороне Яндекса, это лучшее, что ты можешь поделать, наверное.
Например, для Москвы программа лезет вот сюда:
https://export.yandex.ru/weather-ng/forecasts/27612.xml
И этот url действительно доступен через раз (пробовал в браузере).