【发布时间】:2012-05-24 12:55:32
【问题描述】:
我的 Rails 应用程序会动态生成大约 10MB 的响应,如下所示:
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%。
然而,在 staging/production 上部署时,unicorn 位于 nginx 和 unix 套接字之后。在该配置中,类似的curl http://staging/foo > /dev/null 在生成数据时看到进度为 0%,然后在传输时从 0% 到 100%,就像没有流式传输一样。事实上,通过查看服务器日志,我可以看到 curl 在生成请求的整个过程中一直在等待,并且一旦请求完成,curl 在接收数据时就会涓涓细流。
我的假设是某些东西(nginx 或其他什么)在将整个请求实际发送到客户端之前将其缓冲在某处。
目前我在 nginx 配置中使用了 proxy_buffering off,而 X-Accel-Buffering HTTP 响应标头无济于事。我还将 Ubuntu 10.04 的 nginx 0.7 从半官方 ppa 升级到 1.2。
【问题讨论】:
标签: ruby-on-rails nginx streaming unicorn generated