Ожидание завершения HTTP-запроса в контроллере без таймаута - PullRequest
0 голосов
/ 17 мая 2018

У меня есть действие в контроллере, подобное:

def action1
  uri = URI("https://exmaple.com/api")
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Post.new(uri.request_uri)
  // request spent time about > 60s
  res = http.request(request)
  render json: res
end

Когда я называю действие выше. Он всегда отвечает статусом 504 (тайм-аут). Я хочу получить ответ в JSON без ошибки 504. Может кто-нибудь дать мне решение этой проблемы? Я не хочу устанавливать время ожидания в среде продукта в конфигурации.

1 Ответ

0 голосов
/ 17 мая 2018

Как его, сторонний запрос и всегда принимает > 60 sec.

поэтому я предпочитаю перемещать этот код в фоновом режиме, а затем кэшировать его. и каждый раз, когда я посылаю ответ из кеша, вместо того чтобы делать вызов API. также запланируйте работу так, чтобы кэш часто обновлялся.

Чтобы указать время ожидания, вы можете попробовать что-то вроде этого:

Net::HTTP.start(url.host, url.port, :read_timeout => 500) {|http| http.request(request)}
...