![](/img/trans.png)
[英]WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
[英]What does “WARN Could not determine content-length of response body.” mean and how to I get rid of it?
自從升級到 Rails 3.1 后,我在開發日志中看到了這條警告消息:
WARN 無法確定響應正文的內容長度。 設置響應的內容長度或設置
Response#chunked = true
這是什么意思,我該如何刪除它? 這是個問題嗎?
向 Rails-Core 的一位成員提出了同樣的問題:
https://twitter.com/luislavena/status/108998968859566080
答案是:
https://twitter.com/tenderlove/status/108999110136303617
是的,沒關系。 需要清理它,但沒有受到任何傷害。
以下補丁解決了我的問題; 沒有更多的警告給我了。
只需在第 205 行編輯文件 httpresponse.rb,如上面的鏈接所示; 實際上,該鏈接顯示了對 Ruby 未來版本的更正。
我在通過 RVM 作為單個用戶安裝的 ruby 1.9.3-p0 上使用 rails 3.2.0。 所以我的位置是:
~/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
要更改的文件的位置取決於安裝類型、RVM 與否,甚至是多用戶或單用戶,所以我只給出它的最后一部分:
.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
我希望這對某人有幫助。
編輯:這是更改 ruby 項目的主干分支中相關行的提交的鏈接。
只需將 Gem 顯式添加到 Gemfile 就消除了我的警告消息:
group :development do
gem 'webrick', '~> 1.3.1'
end
您也可以使用 Thin 代替默認的 Webrick。 將此添加到Gemfile
gem 'thin'
然后rails s thin
將使用 thin,並且警告將消失。
如果您使用的是.rvm,請執行此操作來修復它...
正如João Soares所提到的,所有的功勞都歸功於他,如果你不想擺脫這個關於開發的警告,你可以這樣做。
使用您喜歡的編輯器打開此文件:
~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
Go 到包含這個的行(對我來說它真的是第 206 行):
if chunked? || @header['content-length']
將它從這個補丁中更改為:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
保存文件並最終重新啟動您的 Rails 服務器
此問題已在 Ruby 的主干分支中通過對 webrick 的提交得到修復。
您可以在您的設置中類似地編輯這個特定的 webrick 文件。 大致位置可以通過以下方式找到:
gem which webrick
要實際編輯文件:
nano \`ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb
(或者用你最喜歡的編輯器代替 nano。)
JRuby 版本:如果您正在使用.rvm,請執行此操作來修復它...
正如João Soares和Kjellski所提到的,如果您想擺脫這個關於開發的警告並且您正在使用 JRuby,那么您可以這樣做。
使用您喜歡的編輯器打開此文件:
~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
Go 到包含這個的行(對我來說是第 205 行):
if chunked? || @header['content-length']
將它從這個補丁中更改為:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
保存文件並最終重新啟動您的 Rails 服務器。
添加
config.middleware.use Rack::ContentLength
到您的application.rb
文件,即使使用 webrick,警告也會消失。 這也將在渲染 json 或文本響應時在生產中正確設置Content-Length
。
從 webrick 中刪除違規行的另一種解決方法。 它只是沒那么有用:
cd `which ruby`/../../lib/ruby/1.9.1/webrick/ && sed -i '.bak' -e'/logger.warn/d' httpresponse.rb
(您可能需要sudo
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.