ruby-on-rails puma - Qu'est-ce que "WARN ne peut pas déterminer la longueur du contenu du corps de la réponse" signifie et comment m'en débarrasser?




heroku configuration (9)

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éfinir la longueur du contenu de la réponse ou définir la Response#chunked = true

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


Answers

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

Comme mentionné par João Soares , tous les crédits à lui, 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 favori pour ouvrir ce fichier:

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

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

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


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

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

  1. Utilisez votre éditeur favori pour ouvrir ce fichier:

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

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

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


Ajouter

config.middleware.use Rack::ContentLength

à votre fichier application.rb , et l'avertissement disparaîtra même avec webrick. Cela définira également Content-Length correctement en production lors du rendu d'une réponse json ou texte.


Ce problème a été corrigé dans la branche Trunk de Ruby avec cette link de webrick.

Vous pouvez modifier ce fichier webrick particulier de la même manière dans votre configuration. L'emplacement approximatif peut être trouvé par:

gem which webrick

Pour éditer le fichier:

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

(Ou à la place de nano, utilisez votre éditeur préféré.)



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

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

(vous devrez peut-être sudo )


Juste ajouter explicitement le Gem au Gemfile s'est débarrassé des messages d'avertissement pour moi:

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

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

204_304_keep_alive.patch

Il suffit de modifier le fichier httpresponse.rb à la ligne 205 comme indiqué sur le lien ci-dessus; en fait le lien montre une correction faite à une prochaine version de Ruby.

J'utilise les rails 3.2.0 sur ruby ​​1.9.3-p0 installé par RVM en tant qu'utilisateur unique. Donc, l'emplacement dans mon cas est:

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

L'emplacement du fichier à modifier diffère selon le type d'installation, RVM ou non, ou même multi-utilisateur ou mono-utilisateur, donc je ne fais que 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: C'est le link vers le commit qui a modifié la ligne en question dans la branche trunk du projet ruby.


Si vous commencez votre voyage avec l'application de test Rails, je vous recommande de commencer avec TestUnit. Vous pouvez trouver un très bon cours sur la meilleure application de tests de rails et les meilleures pratiques sur http://www.codeschool.com/courses/rails-testing-for-zombies Si vous êtes plus expérimenté en matière de tests, vous pouvez essayer RSpec.





ruby-on-rails ruby webrick