2012-05-24 52 views
0

我的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%,就好像沒有流式傳輸一樣。事實上,通過查看服務器日誌,我可以看到curl等待請求生成的整個過程,並且只要請求完成,curl就會在接收數據時慢慢涓流。

我的猜測是,在將實際發送給客戶端之前,某處(nginx或其他)緩衝了整個請求。

現在我已經在nginx配置中使用了proxy_buffering off,而X-Accel-Buffering的HTTP響應頭卻無濟於事。我也將Ubuntu 10.04的nginx 0.7從半官方的ppa上升到了1.2。

回答

0

原來10738118是行爲的根源。事實上,響應中缺少Last-Modified會觸發Rails/Rack中某處的緩衝。