在发布与 nginx 相关的问题后,我的调查更进一步:问题是,merb 框架在大约 30 秒后超时。如果我告诉底层 nginx-server 不要超时,merb 会这样做,但我找不到告诉它不要超时的方法;我需要处理最多需要几分钟的请求。
有什么提示吗?非常感谢。
- 更新 -
似乎merb后面的杂种导致了错误。有什么方法可以改变使用 merb 运行的 mongrel-timeout 吗?
也许不同的方法会产生更好的结果 - 而不是解决超时问题,如何通过推迟任务的执行来最大化吞吐量?
长时间运行任务的一些方法是使用run_later或执行单独的工作进程来完成任务......
def run_in_background(r)
Thread.new do
response = IO.popen(r) do |f|
f.read
end
end
end
在这两种情况下,您都应该返回202(已接受)作为状态代码和调用应用程序可以获取状态更新的 URL。
我使用这种方法来处理导致后台批处理执行的请求。每个都将它的开始时间、进度和完成时间写入数据库(您可以轻松地使用文件)。调用 URL 时,我从数据库中获取进度并将其提供给调用进程。