簡體   English   中英

“警告無法確定響應正文的內容長度”是什么意思。 意思是我如何擺脫它?

[英]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

是的,沒關系。 需要清理它,但沒有受到任何傷害。

以下補丁解決了我的問題; 沒有更多的警告給我了。

204_304_keep_alive.patch

只需在第 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所提到的,所有的功勞都歸功於他,如果你不想擺脫這個關於開發的警告,你可以這樣做。

  1. 使用您喜歡的編輯器打開此文件:

     ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
  2. Go 到包含這個的行(對我來說它真的是第 206 行):

     if chunked? || @header['content-length']
  3. 將它從這個補丁中更改為:

     if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. 保存文件並最終重新啟動您的 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 SoaresKjellski所提到的,如果您想擺脫這個關於開發的警告並且您正在使用 JRuby,那么您可以這樣做。

  1. 使用您喜歡的編輯器打開此文件:

     ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
  2. Go 到包含這個的行(對我來說是第 205 行):

     if chunked? || @header['content-length']
  3. 將它從這個補丁中更改為:

     if chunked? || @header['content-length'] || @status == 304 || @status == 204
  4. 保存文件並最終重新啟動您的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM