Rails 3.1にアップグレードしてから、開発ログに次の警告メッセージが表示されています。
WARNは、応答本文のコンテンツ長を判別できませんでした。応答のコンテンツ長を設定するか、
Response#chunked = true
を設定します
これは何を意味し、どのように削除できますか?それって問題ですか?
Rails-Coreのメンバーの一人に同じ質問をしました:
https://Twitter.com/luislavena/status/10899896885956608
そして答え:
https://Twitter.com/tenderlove/status/108999110136303617
ええ、大丈夫です。それをきれいにする必要がありますが、何も傷ついていません。
次のパッチは私の場合の問題を解決しました;これ以上の警告はありません。
上記のリンクに示すように、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 です。
GemfileにGemを明示的に追加するだけで、警告メッセージがなくなりました。
group :development do
gem 'webrick', '~> 1.3.1'
end
デフォルトのWebrickの代わりにThinを使用することもできます。これをGemfile
gem 'thin'
に追加します
Rails s thin
はthinを使用し、警告は消えます。
.rvmを使用している場合は、これを実行して修正してください...
JoãoSoaresが述べたように、彼へのすべての功績は、開発に関するこの警告を取り除きたくない場合にできることです。
お気に入りのエディターを使用してこのファイルを開きます。
~/.rvm/rubies/<Ruby-version>/lib/Ruby/1.9.1/webrick/httpresponse.rb
これを含む行に移動します(私にとっては実際には206行目でした)。
if chunked? || @header['content-length']
このパッチ から次のように変更します。
if chunked? || @header['content-length'] || @status == 304 || @status == 204
ファイルを保存し、最終的にRailsサーバーを再起動します
この問題は、webrickへの commit により、Rubyのtrunkブランチで修正されました。
この特定のwebrickファイルは、セットアップで同様に編集できます。おおよその場所は次の方法で見つけることができます。
gem which webrick
ファイルを実際に編集するには:
nano \`Ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb
(またはnanoの代わりに、お気に入りのエディターを使用します。)
JRubyバージョン:.rvmを使用している場合は、これを実行して修正してください...
JoãoSoaresおよびKjellskiで述べたように、これは開発に関するこの警告を取り除きたい場合にできることです。あなたはJRubyを使用しています。
お気に入りのエディターを使用してこのファイルを開きます。
~/.rvm/rubies/jruby-<version>/lib/Ruby/<1.8 or 1.9>/webrick/httpresponse.rb
これを含む行に移動します(私にとっては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
が必要になる場合があります)