「警告応答本文のコンテンツの長さを判別できませんでした」とは何ですか。それを取り除く方法とはどういう意味ですか?


320

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

警告応答本文のコンテンツ長を特定できませんでした。応答またはセットのコンテンツ長を設定するResponse#chunked = true

これはどういう意味ですか、どうすれば削除できますか?それって問題ですか?


1
ここでも同じですが、それはJSを介したリモート呼び出しの場合に起こります。
Tim Baas

2
今日、Ruby 1.9.3にアップグレードするとすぐにこれを手に入れました。以前は見ていませんでした。Ruby 1.9.3でのWEBrickの変更が原因であると思います...
Tyler Rick

50
確かにWEBrickの問題です。当面は、「薄い」gemをGemfileに追加して、WEBrickの代わりにRailsを起動することができますrails s thin。たーだ!警告はもうありません。
スコット

回答:


229

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

https://twitter.com/luislavena/status/108998968859566080

そして答え:

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

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


9
fyi、メッセージが気になる場合は、回避策としてシンを使用できます(gem 'thin'gemfileに追加し、を使用してサーバーを起動しますrails server thin)。(おっと、ちょうど@Scottロウは既にこの上に述べたことに気づいた。)
fearless_fool

280
このようなことが「何も傷つけられていない」というカテゴリーに分類されると、これは不愉快なことです。何千人もの人々が何が起こっているのかを理解するために時間を浪費しているという事実だけで、それを論争するのに十分です。
マークフレイザー

16
@KenThompson問題はRailsではなくWebrickです。Webrickはキープアライブ接続をサポートしていないため、発生している警告/問題が発生します。Webには適切な/より良いWebサーバー(シンまたはパッセンジャースタンドアロンなど)を使用することをお勧めします。Rubyの今後のバージョンでは、この問題が修正されます。
Luis Lavena

3
開発用PCのwebrickサーバーは、同じ.js.erbファイルを2回レンダリングします。2回のレンダリングの問題は、nginxを実行している本番サーバーではなくなります。したがって、これは私たちの場合のような実際の問題です。
user938363

2
回答には、リンクではなくTwitter投稿のコンテンツを含める必要があります。
Pedro Rolo

78

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

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プロジェクトのトランクブランチで問題の行を変更したコミットへのリンクです。


私はdebian squeezeを使用していて、aptがRubyバージョン1.9.3p194をインストールしましたが、この問題はまだ発生します。Rubyの日付は2012-04-20、tenderloveのパッチの日付はTue Dec 13 07:30:14 2011ですが、これはまだ発生しています。
kristianp 2013年

Debian squeezeでは、RVMがインストールされたRubyバージョン1.9.3-p327 WEBrickは依然としてこれらの問題のある警告を出します。
MarkDBlackwell 2013

56

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

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

5
はい、私もです。この作品はであってもよい理由の手がかりフィーチャー#5481 Gemifying Rubyの標準ライブラリ:「ため『偽の宝石』、 『宝石の更新』によってインストールさSTDLIBの新しいファイルのがされて無視され、ユーザーが明示的に宝石[ 『WEBrickには』]書き込みしない限り、 」
MarkDBlackwell

2
これは、「無視する」または「パッチウェブリック」よりもはるかに優れています。ありがとうございました!
nessur 2013年

54

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

その後rails s thin、シンを使用し、警告が消えます。


はい。これは私が最近数ヶ月でやったことです。Ryan Batesは最近のRailscastでも言及しています。
Nate Bird

1
@camの歌:ほぼ正しい:rails s thinはWebrickの代わりにthinを使用し、警告は消えます。
fearless_fool

1
グループに入れthinましたdevelopment。レール4の実行時に自動的にそれを拾っているようだrails s
描画

15

.rvmを使用している場合は、これを実行して修正します...

で述べたように、ジョアン・ソアレス彼に、すべてのクレジット、これはあなたが開発にこの警告を取り除くためにwan't場合は、何ができるかです。

  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サーバーを再起動します


1
ありがとうございました!私のline 107ためでした。
gbdev 2013

12

この問題は、Rubyのトランクブランチでwebrickへのこのコミットにより修正されました。

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

gem which webrick

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

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

(または、nanoの代わりに、お好みのエディターを使用してください。)


上記の素晴らしいコマンドライン(ユーモラスにエディター、nanoを含む)は、帰属せずに解除され、RailsRockサイトの著作権で保護されています
MarkDBlackwell 2013

バックティックはおそらくエスケープされるべきではありません。したがって、それは本当に次のようになりますnano `ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"`/httpresponse.rb
MarkDBlackwell

5

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

で述べたようにジョアン・ソアレス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サーバーを再起動します。


@schwabsauce最初の命令を除いて、残りはJRuby固有ではありません。ファイルの検索に役立ちます。明確にするために、他の指示は繰り返されます。
クリンボ2013年

3

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

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

(あなたがする必要があるかもしれませんsudo


3

追加

config.middleware.use Rack::ContentLength

あなたのapplication.rbファイル、および警告がWEBrickにしても、消えます。これはContent-Length、jsonまたはテキスト応答をレンダリングするときに、本番環境でも適切に設定されます。


キープアライブパッチで問題を隠すのではなく、実際に問題を解決するというアイデアが気に入っています。残念ながら、この提案は2倍の数の警告を吐き出すだけです。
ラビリンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.