处理长时间运行的任务

时间:2012-02-19 18:23:27

标签: ruby-on-rails delayed-job spawn

我有一个Web应用程序,它有一个长时间运行的任务 - 生成PDF报告。生成各种图表,总共需要15秒进行处理。该报告由用户生成。

在请求时处理报告目前会导致流程被捆绑,更重要的是(鉴于本网站的使用不重),有时请求会超时。

因此,我正在重新设计应用程序此部分的体系结构(Rails 2.3.8)。为了说明这一点,每天生成的报告不太可能超过几个,这是一个非常小众的应用程序,因此重要的进一步扩展并不是主要问题。我打算将来交出这个项目,所以稳定性就是这样。

我认为最明显的解决方案是使用Spawn生成报告,并在完成后通过电子邮件向用户发送下载链接。我研究过的另一个解决方案是DelayedJob

任何做过类似事情的人都能推荐一种方法吗?

1 个答案:

答案 0 :(得分:0)

delayed_job或其他一些排队机制将是最容易设置的。使用delayed_job,您只需将您的工作人员排队,而不是创建PDF,服务器上的后台进程将从队列中执行任何可用的工作。使用spawn来分叉你的整个过程似乎有点笨拙,并且似乎不适合其他次要的,但仍然运行较长的任务(如发送电子邮件)。