【发布时间】:2017-03-13 05:56:15
【问题描述】:
我有一个 Ruby on Rails 路线; config/routes.rb 说:
post 'upload/testruns' => 'upload#testruns'
在app/controllers/api/upload_controller.rb 我有一个:
def testruns
方法,它处理POST。问题是方法处理时间会随着上传数据的累积而增加,因为它需要相关的计算(例如,保存统计信息,每次上传时重新计算它们等)。
这会阻塞另一端(即启动 POST 到 https://app.com/upload/testruns 的一端),它最终会达到硬编码超时。我完全可以增加超时时间,但这是一场猫捉老鼠的游戏,很快就需要一次又一次地增加。
我如何在收到POST(应该只是几秒钟)后立即从 testruns 处理方法返回并延迟例如稍后进行统计处理?
发布的数据不大;正是积累的历史使它的过程越来越漫长。
【问题讨论】:
-
使用后台作业
activejob或单独使用sidekiqresque将在后台进行所有处理并使用作业 ID 发送快速响应,因此响应时间会更短
标签: ruby-on-rails ruby post