Rails: как обработать ошибку 503 от внешнего сервиса? - PullRequest
0 голосов
/ 29 ноября 2018

Мой код вызывает внешнюю службу ( этот драгоценный камень, в частности )

Код в моем контроллере:

query_one = GoogleSearchResults.new num: "1", q: "#{invite.invitee.name} + #{invite.invitee.guest_company}"

Свремя от времени происходит сбой службы, и Rollbar показывает мне:

Message
RuntimeError: Our services are overloaded, please try again later.

Traceback
OpenURI::HTTPError: 503 Service Unavailable

В каком коде следует заключить строку запроса, чтобы она ждала одну секунду, чтобы получить успешный ответ от сервера, и еслитерпит неудачу, просто идет дальше?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Как то так ...

begin
  attempts ||= 0
  query_one = GoogleSearchResults.new num: "1", q: "#{invite.invitee.name} + #{invite.invitee.guest_company}"
rescue OpenURI::HttpError
  if (attempts += 1) <= 1
    sleep 1
    retry
  end
end
0 голосов
/ 29 ноября 2018

Я бы написал блок try / catch, который ищет это конкретное исключение и выполняет экспоненциальный откат.

# Exponential backoff in Ruby
begin
  make_request
rescue RequestError => e
  if retries <= max_retries
    retries += 1
    sleep 2 ** retries
    retry
  else
    raise "Timeout: #{e.message}"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...