ruby-on-rails ruby webrick

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).



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í.

204_304_keep_alive.patch

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.

  1. Usa tu editor favorito para abrir este archivo:

    ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb

  2. Vaya a la línea que contiene esto (para mí fue realmente la línea 206):

    if chunked? || @header[''content-length'']

  3. Cámbiala, tomada de 204_304_keep_alive.patch , por esta:

    if chunked? || @header[''content-length''] || @status == 304 || @status == 204

  4. 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.

  1. Usa tu editor favorito para abrir este archivo:

    ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb

  2. Vaya a la línea que contiene esto (para mí era la línea 205):

    if chunked? || @header[''content-length'']

  3. Cámbiala, tomada de 204_304_keep_alive.patch , por esta:

    if chunked? || @header[''content-length''] || @status == 304 || @status == 204

  4. Guarde el archivo y finalmente reinicie su servidor de rieles.