首页 > 解决方案 > 等待 HTTP 请求在控制器中完成而不超时

问题描述

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

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 格式获得响应。有人可以给我解决这个问题的方法吗?我不想在配置中的产品环境中设置超时。

标签: ruby-on-railscapybara

解决方案


作为其,第 3 方请求并且总是需要> 60 sec.

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

要指定超时,您可以尝试以下操作:

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

推荐阅读