在Rails中,是否可以将响应分两部分发送回浏览器? 第一部分不需要是任何具体的(下面解释的原因)。响应的第二部分是完整的正常响应,例如.html.erb格式的视图。
我希望这样做的原因是Heroku需要在30秒内将回复发送回浏览器,但是我的应用需要超过30秒才能执行数十次计算了120万条记录。
Heroku文档表明这可能适用于某些平台(但Rails是否可行?):https://devcenter.heroku.com/articles/limits
HTTP请求具有最初的30秒窗口,其中包含Web 进程必须返回响应数据(完成的响应或 一些响应数据表明该过程是活跃的)。 在最初的30秒内不发送响应数据的进程 窗口会在日志中看到H12错误。
P.S.-我认识到可能有比Rails更好的平台来构建这种数据密集型应用程序,但我在Rails中构建它是因为这是我所知道的。
谢谢!
答案 0 :(得分:1)
正确这样做的方式,特别是在Heroku上,是background jobs。如果您不想支付额外的动态,那么some hacks可能对您有用。
如果您只是需要共同攻击某些内容,streaming API应该可以正常运行。您应该能够每30秒写一个空白区域,直到您的工作完成。请记住,您需要一种方法来中断长时间运行的任务以发送响应。这可能意味着支持线程的Ruby版本。
如果你所做的只是从数据库中读取大量记录,你可以use find_each
with streaming。