在rails响应中发送一些初步数据

时间:2014-06-22 18:27:56

标签: ruby-on-rails ruby-on-rails-3 heroku

在Rails中,是否可以将响应分两部分发送回浏览器? 第一部分不需要是任何具体的(下面解释的原因)。响应的第二部分是完整的正常响应,例如.html.erb格式的视图。

我希望这样做的原因是Heroku需要在30秒内将回复发送回浏览器,但是我的应用需要超过30秒才能执行数十次计算了120万条记录。

Heroku文档表明这可能适用于某些平台(但Rails是否可行?):https://devcenter.heroku.com/articles/limits

  

HTTP请求具有最初的30秒窗口,其中包含Web   进程必须返回响应数据(完成的响应或   一些响应数据表明该过程是活跃的)。   在最初的30秒内不发送响应数据的进程   窗口会在日志中看到H12错误。

P.S.-我认识到可能有比Rails更好的平台来构建这种数据密集型应用程序,但我在Rails中构建它是因为这是我所知道的。

谢谢!

1 个答案:

答案 0 :(得分:1)

正确这样做的方式,特别是在Heroku上,是background jobs。如果您不想支付额外的动态,那么some hacks可能对您有用。

如果您只是需要共同攻击某些内容,streaming API应该可以正常运行。您应该能够每30秒写一个空白区域,直到您的工作完成。请记住,您需要一种方法来中断长时间运行的任务以发送响应。这可能意味着支持线程的Ruby版本。

如果你所做的只是从数据库中读取大量记录,你可以use find_each with streaming