2012-02-19 194 views
0

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

在请求时处理报告现在导致进程被阻塞,更重要的是(由于使用本网站不重)有时请求超时。

因此,我正在重新设计应用程序的这一部分的体系结构(Rails 2.3.8)。为了说明这一点,不可能每天都会生成几个这样的报告,而且这是一个非常利基的应用程序,所以重要的进一步扩展并不是主要关心的问题。尽管如此,我打算在未来交出这个项目,所以稳定性是。

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

能做出类似事情的人能推荐一种方法吗?

回答

0

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

+0

是的,我想,我想知道如果另一个好处可能是当前同步完成(如忘记密码,电子邮件),但是这可能有时其他任务,需要一段时间,可以使用相同的机制来排队。 我想缺点是有一个后台进程始终运行,而不是在需要时分叉进程。 为了翻转它,是否有任何情况下任何人都会推荐使用Spawn分支进程? – sparky 2012-02-20 01:11:12

相关问题