web-dev-qa-db-fra.com

Que fait "WARN Impossible de déterminer la longueur du contenu du corps de la réponse." signifie et comment je m'en débarrasser?

Depuis la mise à niveau vers Rails 3.1, ce message d'avertissement apparaît dans mon journal de développement:

WARN Impossible de déterminer la longueur du contenu du corps de la réponse. Définissez la longueur du contenu de la réponse ou définissez Response#chunked = true

Qu'est-ce que cela signifie et comment puis-je l'enlever? C'est un problème?

320
Nate Bird

J'ai posé la même question à l'un des membres de Rails-Core:

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

Et la réponse:

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

ça va. Besoin de le nettoyer, mais rien n'est blessé.

229
Luis Lavena

Le correctif suivant a résolu le problème dans mon cas; plus d'avertissements pour moi.

204_304_keep_alive.patch

Editez simplement le fichier httpresponse.rb à la ligne 205, comme indiqué sur le lien ci-dessus; En fait, le lien montre une correction apportée à une future version de Ruby.

J'utilise Rails 3.2.0 sur Ruby 1.9.3-p0 installé via RVM en tant qu'utilisateur unique. Donc, dans mon cas, le lieu est:

~/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/webrick/httpresponse.rb

L'emplacement du fichier à modifier varie en fonction du type d'installation, RVM ou non, voire même du fait de plusieurs utilisateurs ou d'un seul utilisateur. Je vais donc simplement en donner la dernière partie:

.../Ruby-1.9.3-p0/lib/Ruby/1.9.1/webrick/httpresponse.rb

J'espère que cela peut être utile à quelqu'un.

EDIT: Il s’agit du lien vers le commit qui a modifié la ligne en question dans la branche principale du projet Ruby.

78
jasoares

L'ajout explicite de Gem à Gemfile m'a permis d'éliminer les messages d'avertissement:

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

Vous pouvez également utiliser Thin au lieu du Webrick par défaut. Ajoutez ceci à Gemfilegem 'thin'

alors Rails s thin utilisera mince et l'avertissement disparaîtra.

54
Cam Song

Si vous utilisez .rvm, faites ceci pour le réparer ...

Comme mentionné par João Soares , tout ce qu’il en dit, c’est ce que vous pouvez faire si vous ne voulez pas vous débarrasser de cet avertissement sur le développement.

  1. Utilisez votre éditeur préféré pour ouvrir ce fichier:

    ~/.rvm/rubies/<Ruby-version>/lib/Ruby/1.9.1/webrick/httpresponse.rb
    
  2. Allez à la ligne qui contient ceci (pour moi c'était vraiment la ligne 206):

    if chunked? || @header['content-length']
    
  3. Changez-le, pris de ce patch , en ceci:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. Enregistrez le fichier et redémarrez éventuellement votre serveur Rails

15
Kjellski

Ce problème a été corrigé dans la branche de coffre de Ruby avec ce commit à webrick.

Vous pouvez éditer ce fichier webrick de manière similaire dans votre configuration. L'emplacement approximatif peut être trouvé par:

gem which webrick

Pour éditer réellement le fichier:

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

(Ou au lieu de nano, utilisez votre éditeur préféré.)

12
MarkDBlackwell

Version JRuby: Si vous utilisez .rvm, faites ceci pour le réparer ...

Comme mentionné par João Soares et Kjellski , voici ce que vous pouvez faire si vous souhaitez vous débarrasser de cet avertissement sur le développement et vous utilisez JRuby.

  1. Utilisez votre éditeur préféré pour ouvrir ce fichier:

    ~/.rvm/rubies/jruby-<version>/lib/Ruby/<1.8 or 1.9>/webrick/httpresponse.rb
    
  2. Allez à la ligne qui contient ceci (pour moi c'était la ligne 205):

    if chunked? || @header['content-length']
    
  3. Changez-le, pris de ce patch , en ceci:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. Enregistrez le fichier et redémarrez éventuellement votre serveur Rails.

5
Crimbo

Ajouter

config.middleware.use Rack::ContentLength

dans votre fichier application.rb et l'avertissement disparaîtra même avec webrick. Ceci définira également correctement Content-Length en production lors du rendu d'une réponse JSON ou textuelle.

3
Michael Franzl

Une autre solution de contournement qui supprime la ligne incriminée de webrick. Ce n'est tout simplement pas utile:

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

(vous devrez peut-être Sudo)

3
Xavier Shay