等待HTTP请求在控制器中完成而不会超时

时间:2018-05-17 03:49:20

标签: ruby-on-rails capybara

我在控制器中有一个类似于:

的动作
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(超时)。 我希望在没有错误504的情况下获得JSON响应。 有人可以给我一个解决这个问题的方法吗?我不想在配置中在产品环境中设置超时。

1 个答案:

答案 0 :(得分:0)

作为第3方请求,始终需要> 60 sec

所以我更喜欢在后台作业中移动此代码然后缓存它。 每次我从缓存发送响应而不是进行API调用。 另外,安排作业以便经常更新缓存。

要指定超时,您可以尝试这样的事情:

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