потоковые просмотры в ruby ​​on rails 3.1

Я новичок в рельсах и рубине в этом отношении. Я создал приложение для рельсов на основе ruby ​​​​1.9.2 и rails 3.1.

Я столкнулся с проблемой, вероятно, с моим пониманием реализации потоковой передачи в рельсах. Мне кажется, прежде чем рельсы отрендерят содержимое шаблона, он должен завершить процесс его оценки.

скажем, например, что у меня есть скрипт cgi, подобный следующему

#!/bin/sh


cat <<END
Content-Type: text/html

END

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

это будет отображать числа последовательно от 1 до 10 в браузере, поскольку они отображаются сценарием, а не все сразу. Это поведение, которое я хотел бы подражать в представлении рельсов.

скажем, у меня есть следующее представление.

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

он будет ждать, пока сон 5 не завершится, прежде чем что-либо отображать.

используя curl -i для просмотра ответа от веб-сервера, я сразу же получаю заголовок ответа, как и ожидалось, с помощью Transfer-Encoding: chunked, как и ожидалось. однако он не отображает содержимое тела, пока не завершится сон.

что мне нужно сделать, чтобы он отображал содержимое тела так же, как тот простой скрипт cgi, который я вставил выше? В частности, сначала <h1> hi </h1>, затем через 5 секунд <h2> bye </h2> ?


person John Timon    schedule 21.10.2011    source источник


Ответы (1)


Ознакомьтесь с документацией для ActionController::Streaming. А именно:

Потоковое вещание можно легко добавить в заданный шаблон, все, что вам нужно сделать, это указать параметр :stream.

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

Вы, конечно, захотите прочитать остальные документы для деталей.

person Jordan Running    schedule 21.10.2011
comment
правильно, и это то, что у меня есть в контроллере, у него есть format.html { render :stream => true }, и с помощью curl я вижу, что он передает заголовок ответа и макет, но не содержимое шаблона. - person John Timon; 21.10.2011