Я использую Rails 4.2.3 и Nokogiri для получения данных с веб-сайта. Я хочу, чтобы выполнить действие, когда я не получаю никакого ответа от сервера, поэтому у меня есть:В RoR, как мне получить исключение, если я не получаю никакого ответа от сервера?
begin
content = open(url).read
if content.lstrip[0] == '<'
doc = Nokogiri::HTML(content)
else
begin
json = JSON.parse(content)
rescue JSON::ParserError => e
content
end
end
rescue Net::OpenTimeout => e
attempts = attempts + 1
if attempts <= max_attempts
sleep(3)
retry
end
end
Обратите внимание, что это отличается, чем получить 500 от сервера. Я просто хочу повторить попытку, когда вообще не получаю ответа, потому что у меня нет TCP-соединения или потому что сервер не отвечает (или какая-то другая причина, из-за которой я не получаю никакого ответа). Есть ли более общий способ учесть эту ситуацию, кроме как у меня? Я чувствую, что существует множество других типов исключений, о которых я не думаю.
Вы не используя Nokogiri для получения данных, вы используете его для _parse_ данных. OpenURI «получает» данные. Это важное различие, которое устраняет Нокогири из вопроса. Кроме того, заголовок вводит в заблуждение; Rails - это структура, написанная на Ruby. Вы не пишете вещи в Rails, вы пишете их в Ruby, а иногда используете методы Rails. Я бы предложил переформулировать вопрос на основе этих знаний. Существует множество определенных HTTP-ошибок, которые вы можете обрабатывать, и там _can_ быть настраиваемыми, определенными администраторами сайта, поэтому вам нужно будет знать об этом. –
Меня не интересуют какие-либо пользовательские сообщения, определенные сайтом - это означает, что ответ отправляется обратно. Я пытаюсь объяснить ситуацию (и только ситуацию), где я вообще не получаю ответа?Понятно, что я спрашиваю, не получая ответа, а не получая ответы, указывающие на другие условия? – Dave
Вы обеспокоены тем, что не получаете TCP-соединение или не получаете TCP-соединение, но сервер не отвечает. –