Tengo una api escrita en rails que en cada solicitud responde con una respuesta JSON.

La respuesta podría ser enorme, así que tengo que comprimir la respuesta en JSON usando gzip.

Preguntando cómo hacerlo en rails controlador?

He añadido la línea

use Rack::Deflater

en config.ru

También debo estar cambiando algo en la línea de lo que hace JSON?

render :json => response.to_json()

También, ¿cómo puedo comprobar si la respuesta es en formato gzip o no..??

Hice una solicitud curl desde la terminal, sólo veo el normal llanura JSON.

4 Comentarios

  1. 29

    Mi post La Compresión de contenido con Rack::Deflater describe un par de maneras de integrar en Rack::Deflater. La forma más fácil sería simplemente la actualización de config/application.rb con:

    module YourApp
      class Application < Rails::Application
        config.middleware.use Rack::Deflater
      end
    end

    y automáticamente te comprimir todas las respuestas de controlador con deflate /gzip si el cliente dice explícitamente que ellos pueden manejar.

    • Necesitaba este Estante del Middleware de la declaración, así como las cabeceras para obtener una gzip respuesta. Gracias!
    • Puedo añadir config.middleware.use Rack::Deflater de la aplicación.rb, compresión de empezar a trabajar sólo en Mac OS (Chrome, FF y Safari). En windows puedo recibir respuestas sin ‘Content-Encoding: gzip», en FF e IE (sólo funciona en google chrome). P. S. «Accept-Encoding: gzip» presente en todos los navegadores. ¿Sabes por qué?)
    • ¿Esto suceder? Encontrar una forma de evitar esto?
    • como recuerdo, se trataba de un problema de vieja FF e IE navegadores y he resuelto este problema mediante la habilitación de gzipping en nginx configuraciones
    • ¿Te acuerdas de las versiones de FF e IE que usted se refiere? Acerca de la adición de gzipping en nginx configuraciones. Es algo a lo largo de las líneas de mattstauffer.co/blog/…
    • por favor, eche un vistazo a stackoverflow.com/questions/30323996/…

  2. 13

    Para la respuesta en formato gzip no tenemos que cambiar la render llamada al método.

    Si la solicitud tiene el encabezado Accept-Encoding: gzip, los Rieles se comprime automáticamente la respuesta en JSON usando gzip.

    Si usted no desea que el usuario envíe una solicitud con el preset de encabezado., usted puede agregar el encabezado de la solicitud de forma manual en el controlador antes de renderizar la respuesta:

    request.env['HTTP_ACCEPT_ENCODING'] = 'gzip'
    render :json => response.to_json()
    • Confirma @curiousmind la respuesta de abajo – usted también tendrá que agregar la Rack::Deflater middleware para obtener Rieles para comprimir la respuesta en JSON, aunque de haber pasado el Accept-Encoding encabezado de la solicitud en conjunto a ‘gzip,deflate’. Observe que el encabezado de la solicitud también es necesario para la compresión de una patada en el.
  3. 5

    Puede consultar Curl mediante el establecimiento de un encabezado personalizado para obtener gzip respuesta

    $ curl -H "Accept-Encoding: gzip, deflate" localhost:3000/posts.json > posts_json.gz

    luego, luego descomprimirlo para ver la respuesta real json

     $ gzip -d posts_json.gz
     $ cat posts_json

    Si no funciona. post de vuelta con salida de rake middlewares para ayudarnos a solucionar aún más.

    • Junto con los encabezados yo también tuve que agregar ‘config.middleware.use el soporte::Deflater » para la aplicación.rb archivo para comprimir el archivo.
  4. 0

    En algunos casos, usted puede considerar para escribir enorme respuesta en un archivo gzip es:

    res = {} # huge data hash
    json = res.to_json
    
    Zlib::GzipWriter.open('public/api/huge_data.json.gz') { |gz| gz.write json }

    y actualización de este archivo regularmente

Dejar respuesta

Please enter your comment!
Please enter your name here