Rails "render: text => proc" в 2.2.2 против 2.3.2 - PullRequest
3 голосов
/ 09 июля 2009

Я испытываю то, что не могу объяснить с помощью Rails 2.3.2. Я создал новое приложение с одним контроллером и одним действием, чтобы попытаться сузить это. Весь мой контроллер выглядит следующим образом.

class LinesController < ApplicationController
  def show
    respond_to do |format|
      format.html { render :text => proc {|response, output|
          10.times do |i|
            output.write("This is line #{i}\n")
            output.flush
          end
        }
      }
    end
  end
end

Когда я запускаю это под Rails 2.2.2, я вижу следующий ответ.

$ curl http://localhost:3002/lines
This is line 0
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
This is line 8
This is line 9

Однако, когда я запускаю это под Rails 2.3.2, я получаю это вместо этого.

$ curl http://localhost:3002/lines
curl: (18) transfer closed with outstanding read data remaining

Если я нажму на это в браузере, то увижу только первую строку.

This is line 0

Обратите внимание, что мой пример кода прямо из документации Rails для render , за исключением того, что я уменьшил количество строк с 10 миллионов до 10.

Я подозреваю, что ответ лежит где-то в методе flush (), но в настоящее время я застрял, пытаясь найти объяснение в исходном коде.

1 Ответ

3 голосов
/ 09 июля 2009

Я полагаю, что эта ошибка была исправлена ​​в 2-3-стабильном коммите bc2c4a45959be21e6314fba7876b32c1f04cd08a. Проверьте сопровождающий билет . Вы можете либо подождать 2.3.3 (не так уж далеко сейчас), либо заморозить текущий 2-3-стабильный из git:

git clone git://github.com/rails/rails.git vendor/rails
cd vendor/rails
git checkout origin/2-3-stable
rm -rf .git
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...