ruby on rails - ¿Qué significa "ADVERTENCIA no se pudo determinar la longitud del contenido del cuerpo de respuesta" y cómo deshacerme de él?
ruby-on-rails webrick (9)
Añadir
config.middleware.use Rack::ContentLength
a su archivo application.rb
, y la advertencia desaparecerá incluso con webrick. Esto también configurará Content-Length
correctamente en producción cuando se represente una respuesta json o de texto.
Desde la actualización a Rails 3.1, veo este mensaje de advertencia en mi registro de desarrollo:
WARN No se pudo determinar la longitud del contenido del cuerpo de respuesta. Establezca la longitud del contenido de la respuesta o establezca la
Response#chunked = true
¿Qué significa esto y cómo puedo eliminarlo? ¿Es un problema?
Este problema se ha solucionado en la rama troncal de Ruby con este link con webrick.
Puede editar este archivo webrick en particular de manera similar en su configuración. La ubicación aproximada se puede encontrar por:
gem which webrick
Para editar realmente el archivo:
nano /`ruby -e"print %x{gem which webrick}.chomp %Q{.rb/n}"/`/httpresponse.rb
(O en lugar de nano, usa tu editor favorito).
Le hice la misma pregunta a uno de los miembros de Rails-Core:
https://twitter.com/luislavena/status/108998968859566080
Y la respuesta:
https://twitter.com/tenderlove/status/108999110136303617
ya, esta bien Necesito limpiarlo, pero nada está siendo herido.
Otra solución que elimina la línea ofensiva de webrick. Simplemente no es tan útil:
cd `which ruby`/../../lib/ruby/1.9.1/webrick/ && sed -i ''.bak'' -e''/logger.warn/d'' httpresponse.rb
(puede que necesites sudo
)
Simplemente al agregar explícitamente la Gema al Gemfile, eliminé los mensajes de advertencia para mí:
group :development do
gem ''webrick'', ''~> 1.3.1''
end
También puede usar Thin en lugar de Webrick predeterminado. Agregue esto a la gem ''thin''
Gemfile
gem ''thin''
entonces los rails s thin
se utilizarán y la advertencia desaparecerá.
El siguiente parche solucionó el problema en mi caso; No hay más advertencias para mí.
Simplemente edite el archivo httpresponse.rb en la línea 205 como se muestra en el enlace anterior; de hecho, el enlace muestra una corrección hecha a un futuro lanzamiento de Ruby.
Estoy usando rieles 3.2.0 en ruby 1.9.3-p0 instalado a través de RVM como un solo usuario. Así que la ubicación en mi caso es:
~/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
La ubicación del archivo que se va a modificar varía según el tipo de instalación, RVM o no, o incluso para varios usuarios o usuarios individuales, por lo que solo le doy la última parte:
.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
Espero que esto pueda ser de ayuda para alguien.
EDITAR: Este es el link a la confirmación que alteró la línea en cuestión en la rama troncal del proyecto ruby.
Si está utilizando .rvm, haga esto para solucionarlo ...
Como lo mencionó João Soares , todos los créditos para él, esto es lo que puede hacer si no quiere deshacerse de esta advertencia sobre el desarrollo.
Usa tu editor favorito para abrir este archivo:
~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
Vaya a la línea que contiene esto (para mí fue realmente la línea 206):
if chunked? || @header[''content-length'']
Cámbiala, tomada de 204_304_keep_alive.patch , por esta:
if chunked? || @header[''content-length''] || @status == 304 || @status == 204
Guarde el archivo y finalmente reinicie su servidor de rieles
Versión de JRuby: si está utilizando .rvm, haga esto para solucionarlo ...
Como mencionaron João Soares y Kjellski , esto es lo que puede hacer si desea deshacerse de esta advertencia sobre el desarrollo y está utilizando JRuby.
Usa tu editor favorito para abrir este archivo:
~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
Vaya a la línea que contiene esto (para mí era la línea 205):
if chunked? || @header[''content-length'']
Cámbiala, tomada de 204_304_keep_alive.patch , por esta:
if chunked? || @header[''content-length''] || @status == 304 || @status == 204
Guarde el archivo y finalmente reinicie su servidor de rieles.