ruby-on-rails - 等待 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 格式获得响应。有人可以给我解决这个问题的方法吗?我不想在配置中的产品环境中设置超时。
解决方案
作为其,第 3 方请求并且总是需要> 60 sec
.
所以我更喜欢在后台作业中移动这段代码,然后缓存它。每次我从缓存发送响应而不是进行 API 调用。此外,安排作业,以便经常更新缓存。
要指定超时,您可以尝试以下操作:
Net::HTTP.start(url.host, url.port, :read_timeout => 500) {|http| http.request(request)}
推荐阅读
- debugging - go http 服务器和 fasthttp 中的内存泄漏
- three.js - 在另一个之上显示一个网格
- python - 获取所有调用的函数(即使被另一个函数调用)libclang python
- c++ - 如何将 cin 读入向量
- javascript - React.js + Reactstrap 多个模态在一个组件中
- c# - foreach 循环中的 Web api 调用 - 超时错误
- python - Python:随机混合两个列表
- unit-testing - 使用随机数进行 Junit 测试
- firebase - 在 Firestore 数据库中存储 Twitch Oauth 令牌
- vb.net - 如何清除 GroupBox 中的每个 TextBox