Моего Rails приложения генерирует ~ ответ 10MB динамически так:потоковых рельсов генерироваться ответ от единорога через Nginx
self.status_code = 200
self.response-body = Enumerator.new { |y| ... }
Запуск приложения в режиме разработки с помощью unicorn_rails
я могу curl http://127.0.0.1:3000/foo > /dev/null
и увидеть ответ в виде поток на клиент через обратную связь о ходе работы. При использовании rails server
(который начинается webrick), потоковая передача не происходит, и я вижу прогресс там, а затем прыгаю от 0% до 100%.
Однако при развертывании на постановке/производстве единорог сидит за nginx и гнездом unix. В этой конфигурации аналогичный curl http://staging/foo > /dev/null
видит прогресс, достигнутый на 0% по мере генерирования данных, затем от 0% до 100% по мере его передачи, как если бы потоковая передача не была. В самом деле, глядя на серверные журналы в стороне, я вижу, что завиток сидит, ожидая все время, когда запрос сгенерирован, и как только запрос завершается, завиток стекает, когда он получает данные.
Мое предположение заключается в том, что что-то (nginx или что-то другое) буферизует весь запрос где-то, прежде чем отправлять его клиенту.
На данный момент я играл с proxy_buffering off
в конфигурации nginx, а заголовок ответа HTTP X-Accel-Buffering
безрезультатно. Я также столкнулся с nginx 0.7 от Ubuntu 10.04 до 1.2 от полуофициального ppa.