2013-01-21 49 views
1

我剛剛遇到一個問題,其中在Rails 3.2.2應用程序中設置response.headers['Content-Length']導致Nginx拋出「502 Bad Gateway」錯誤。Passenger 3.0.17 + Nginx 1.2.4 +「Content-Length」Header = 502 Bad Gateway

我在控制器中有一個操作,它使用send_data方法發送變量中包含的原始JPEG數據。之前,我遇到了一些瀏覽器沒有下載正在發送的整個圖像的問題,並發現沒有發送Content-Length頭,所以我決定使用包含JPEG數據的變量的.bytesize屬性作爲Content-Length。

這在開發過程中可以正常工作(使用Unicorn),現在有一個內容長度標題,其中前面沒有一個標題,但是在我使用Nginx和Passenger的生產環境中,我得到了上述502 Bad網關。此外,在Nginx的錯誤日誌中,我看到:

[error] 30574#0: *1686 upstream prematurely closed connection while reading response header from upstream 

有在Rails的生產日誌,它告訴我的應用程序是精細匹配的條目。

我已經註釋掉了我設置Content-Length標題的行,問題就消失了。我仍在測試是否真的需要發送Content-Length標頭,但與此同時,我想我可能會發布這個好奇心,看看有沒有人有任何想法。

+0

看起來像別人有這個問題:https://groups.google.com/d/topic/phusion-passenger/lXtIjuf8ct8/discussion –

回答

1

AHA!我必須通過添加.to_s方法將大小轉換爲字符串。所以,我最終的結果是

response.headers['Content-Length'] = photo_data.bytesize.to_s 
send_data photo_data, :type => :jpg, :filename => 'file_name.jpg', :disposition => 'attachment' 

因此,它似乎是它是好的發送Content-Length頭部上的Nginx /乘客,但乘客扼流圈,如果它沒有明確的字符串。

相關問題