在轨道上的红宝石流视图3.1

时间:2011-10-21 13:19:59

标签: ruby-on-rails ruby-on-rails-3.1 http-streaming

我是rails的新手,也是ruby。我已经建立了一个基于ruby 1.9.2和rails 3.1

的rails应用程序

我遇到了一个问题,可能是我对rails中的流实现有所了解。在我看来,在rails将呈现模板内容之前,它必须完成评估它的过程。

比方说,我有一个像以下

这样的cgi脚本
#!/bin/sh


cat <<END
Content-Type: text/html

END

for i in {1..10}
do
 echo $i
 sleep 1
done

这将在浏览器中按顺序显示从1到10的数字,因为它们是由脚本呈现的,而不是一次性显示。这是我想在rails视图中模拟的行为。

假设我在视图中有以下内容。

<h1> hi </h1>
<%
sleep 5
%>
<h2> bye </h2>

它将等到睡眠5完成后再显示任何内容。

使用curl -i观察来自Web服务器的响应我立即按预期获得响应头,其中包含Transfer-Encoding:按预期分块。但是,在睡眠完成之前,它不会渲染身体内容。

我需要做什么才能以与我上面粘贴的简单cgi脚本相同的方式呈现正文内容?具体来说,首先<h1> hi </h1>然后5秒后<h2> bye </h2>

1 个答案:

答案 0 :(得分:0)

查看ActionController::Streaming的文档。即:

  

可以轻松地将流式传输添加到给定模板,您只需传递:stream选项。

     
class PostsController
  def index
    @posts = Post.scope
    render :stream => true
  end
end
  

当然,您需要阅读其余文档以获取详细信息。