我在Heroku上部署了一个Rails应用程序。它具有“项目”模型,在“创建”操作中正在处理一些数据(文本分析,有时是大文本),这个过程需要很长时间。如果另一个请求进入Web服务器,则加载任何页面都需要很长时间。避免这种延迟的最佳方法是什么?
答案 0 :(得分:0)
在这种情况下,您通常会使用后台职位经理,如DelayedJob或Resque。如果您刚刚开始,我建议您使用DJ,因为它设置起来非常简单,并且不需要任何外部依赖。
既然你已经提到了Heroku,他们就如何开始使用你的应用程序有一个很好的写作here。
基本上,您将执行长时间运行的任务并将它们添加到作业队列(在DJ的情况下,只是数据库中的另一个表),其中另一个进程将监视该表并在它们出现时运行作业。这样,您可以在后台处理作业时立即向用户返回响应,从而使您的web dyno可以同时处理请求。
如果您使用的是Heroku,那么您需要支付工作人员的dyno与您的网络dyno一起运行。
此外,它取决于您的服务器设置。如果你使用像Unicorn这样的应用程序服务器,你应该能够在一个dyno中运行多个Rails进程,这样你就可以处理Web请求,即使有人在进行文本分析时也是如此。
但是说实话,听起来你的应用程序还没有准备好在Heroku的生产中运行,因为这个问题应该在你甚至部署之前已经有了解决方案。您不希望将Web进程与可能更适合后台工作进程的工作联系起来。