2014-05-16 113 views
0

我在Heroku上部署了Rails应用程序。它有“项目”模型,在“创建”操作中正在处理一些数据(文本分析,有时是巨大的文本),这个过程需要很长时间。如果另一个请求到达Web服务器,则加载任何页面所用的时间太长。避免这种延迟的最佳方法是什么?Ruby on Rails,多个请求延迟

回答

0

在这种情况下,您通常会使用后台作业管理器,如DelayedJobResque。如果您刚刚开始,我建议您使用DJ播放,因为它设置起来非常简单,并且不需要任何外部依赖。

既然你已经提到过Heroku,他们在你的应用程序开始之前就已经写好了here。从本质上讲,您需要长时间运行的任务,并将它们添加到作业队列中(在DJ的情况下,只是数据库中的另一个表),其中另一个进程将监视该表并按其出现的方式运行作业。通过这种方式,您可以在作业在后台工作时立即向用户返回响应,同时保持您的Web dyno免费处理请求。

如果您使用的是Heroku,那么您需要支付工人测功机才能与您的网络测试仪一起运行。

另外它取决于您的服务器设置。如果您使用的是像Unicorn这样的应用程序服务器,那么您应该可以在单个dyno中运行多个Rails进程,因此即使您的文本分析绑定了,也仍然可以处理Web请求。

但是诚实地说,这听起来好像你的应用还没有准备好在Heroku的生产环境中运行,因为这个问题在你部署之前应该已经有了一个解决方案。您不希望让Web进程被束缚在可能更适合后台工作进程的工作上。