刷新 Rails 模板输出

Flushing Rails template output

我发现 Rails 会等到整个视图在服务器上计算完毕,然后才会启动响应并立即转储所有内容。理想情况下,页面应该随着服务器的工作而逐渐填充。

为了检查这一点,我创建了一个新的 Rails (4.1) 项目,生成了一个虚拟资源,并在其视图模板中间添加了 <% sleep 10 %>。结果是 nothing 输出了 10 秒 - Chrome 的网络面板只显示等待接收零字节。也许是因为它是在开发模式下运行的 WEBrick,但我在 Unicorn 上看到了类似的情况(在开发和生产中)。

所以我的问题是如何确保内容在 Rails 中逐渐刷新。理想情况下它应该自动发生(this post implies that's the intention 回到 Rails 3.1),但在这个简单的例子中,没有 _content_for_)但如果有必要,我愿意添加一些 flush()打电话什么的。

如评论中所述,这是在 Rails 中添加的,但不是默认设置:您需要通过为 render 指定 stream 选项来触发此行为:

render stream: true

可以找到此功能的文档 here