web-dev-qa-db-ja.com

「WARNは応答本文のコンテンツの長さを特定できませんでした」どういう意味ですか、どうすればそれを取り除くことができますか?

Rails 3.1にアップグレードしてから、開発ログに次の警告メッセージが表示されています。

WARNは、応答本文のコンテンツ長を判別できませんでした。応答のコンテンツ長を設定するか、Response#chunked = trueを設定します

これは何を意味し、どのように削除できますか?それって問題ですか?

320
Nate Bird

Rails-Coreのメンバーの一人に同じ質問をしました:

https://Twitter.com/luislavena/status/10899896885956608

そして答え:

https://Twitter.com/tenderlove/status/108999110136303617

ええ、大丈夫です。それをきれいにする必要がありますが、何も傷ついていません。

229
Luis Lavena

次のパッチは私の場合の問題を解決しました;これ以上の警告はありません。

204_304_keep_alive.patch

上記のリンクに示すように、205行目でhttpresponse.rbファイルを編集するだけです。実際、リンクは、Rubyの将来のリリースに対して行われた修正を示しています。

RVMを介してシングルユーザーとしてインストールされたRails 1.9.3-p0でRuby 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プロジェクトのtrunkブランチで問題の行を変更したコミットへの link です。

78
jasoares

GemfileにGemを明示的に追加するだけで、警告メッセージがなくなりました。

group :development do
  gem 'webrick', '~> 1.3.1'
end
56
ootoovak

デフォルトのWebrickの代わりにThinを使用することもできます。これをGemfilegem 'thin'に追加します

Rails s thinはthinを使用し、警告は消えます。

54
Cam Song

.rvmを使用している場合は、これを実行して修正してください...

JoãoSoaresが述べたように、彼へのすべての功績は、開発に関するこの警告を取り除きたくない場合にできることです。

  1. お気に入りのエディターを使用してこのファイルを開きます。

    ~/.rvm/rubies/<Ruby-version>/lib/Ruby/1.9.1/webrick/httpresponse.rb
    
  2. これを含む行に移動します(私にとっては実際には206行目でした)。

    if chunked? || @header['content-length']
    
  3. このパッチ から次のように変更します。

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. ファイルを保存し、最終的にRailsサーバーを再起動します

15
Kjellski

この問題は、webrickへの commit により、Rubyのtrunkブランチで修正されました。

この特定のwebrickファイルは、セットアップで同様に編集できます。おおよその場所は次の方法で見つけることができます。

gem which webrick

ファイルを実際に編集するには:

nano \`Ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb

(またはnanoの代わりに、お気に入りのエディターを使用します。)

12
MarkDBlackwell

JRubyバージョン:.rvmを使用している場合は、これを実行して修正してください...

JoãoSoaresおよびKjellskiで述べたように、これは開発に関するこの警告を取り除きたい場合にできることです。あなたはJRubyを使用しています。

  1. お気に入りのエディターを使用してこのファイルを開きます。

    ~/.rvm/rubies/jruby-<version>/lib/Ruby/<1.8 or 1.9>/webrick/httpresponse.rb
    
  2. これを含む行に移動します(私にとっては205行目です)。

    if chunked? || @header['content-length']
    
  3. このパッチ から次のように変更します。

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. ファイルを保存し、最終的にRailsサーバーを再起動します。

5
Crimbo

追加する

config.middleware.use Rack::ContentLength

application.rbファイルに追加すると、webrickを使用しても警告は消えます。これは、jsonまたはテキストレスポンスをレンダリングするときに、本番環境でContent-Lengthを適切に設定します。

3
Michael Franzl

問題のある行をwebrickから削除する別の回避策。それほど便利ではありません:

cd `which Ruby`/../../lib/Ruby/1.9.1/webrick/ && sed -i '.bak' -e'/logger.warn/d' httpresponse.rb

Sudoが必要になる場合があります)

3
Xavier Shay