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?
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é.
Le correctif suivant a résolu le problème dans mon cas; plus d'avertissements pour moi.
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.
L'ajout explicite de Gem à Gemfile m'a permis d'éliminer les messages d'avertissement:
group :development do
gem 'webrick', '~> 1.3.1'
end
Vous pouvez également utiliser Thin au lieu du Webrick par défaut. Ajoutez ceci à Gemfile
gem 'thin'
alors Rails s thin
utilisera mince et l'avertissement disparaîtra.
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.
Utilisez votre éditeur préféré pour ouvrir ce fichier:
~/.rvm/rubies/<Ruby-version>/lib/Ruby/1.9.1/webrick/httpresponse.rb
Allez à la ligne qui contient ceci (pour moi c'était vraiment la ligne 206):
if chunked? || @header['content-length']
Changez-le, pris de ce patch , en ceci:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Enregistrez le fichier et redémarrez éventuellement votre serveur Rails
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é.)
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.
Utilisez votre éditeur préféré pour ouvrir ce fichier:
~/.rvm/rubies/jruby-<version>/lib/Ruby/<1.8 or 1.9>/webrick/httpresponse.rb
Allez à la ligne qui contient ceci (pour moi c'était la ligne 205):
if chunked? || @header['content-length']
Changez-le, pris de ce patch , en ceci:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Enregistrez le fichier et redémarrez éventuellement votre serveur Rails.
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.
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
)