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