2011-10-21 9 views
3

私はレールとRubyについては初めてです。私はRuby 1.9.2とレールをベースにしたレールアプリを構築しました。3.1ruby​​ on railsでのストリーミングビュー3.1

私は問題を抱えていました。レールがテンプレートのコンテンツをレンダリングする前に、それを評価するプロセスを完了しなければならないと私には思われます。

彼らはスクリプトによってレンダリングされるのは、以下の

#!/bin/sh 


cat <<END 
Content-Type: text/html 

END 

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

ように私は、CGIスクリプトを持っていることを、たとえば言わせこれがすべてではない、一度、ブラウザに1から10までの数字を順番に表示されます。これは、レール表示でエミュレートしたい動作です。

私はビューで次のように言うことができます。

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

何も表示されないうちにスリープ5が完了するまで待機します。

ウェブサーバーからの応答を見るためにcurl -iを使用すると、期待どおりにチャンクされたTransfer-Encodingで応答ヘッダーがすぐに取得されます。しかし、それは睡眠が完了するまで体の内容を表現しません。

上記の貼り付けた単純なCGIスクリプトと同じ方法でボディコンテンツをレンダリングするには、どうすればよいですか?具体的には、最初に<h1> hi </h1>を入力してから5秒後に<h2> bye </h2>

答えて

0

ActionController::Streamingのドキュメントをご覧ください。ウィットに:

ストリーミングが簡単に与えられたテンプレートに追加することができ、あなたがする必要があるのは:streamオプションを渡すことです。

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

もちろん、詳細については、ドキュメントの残りの部分を読むことをお勧めします。

+1

これはコントローラに 'format.html {render:stream => true}'があり、curlを使ってレスポンスヘッダとレイアウトをストリームすることができますが、テンプレート。 –

+1

と同じですが、テンプレートをストリームしません... – Subhas