ruby-on-rails json ruby-on-rails-3 gzip rack

ruby on rails - Raíles json respuesta con compresión gzip.



ruby-on-rails ruby-on-rails-3 (4)

Tengo una API escrita en rieles que en cada solicitud responde con una respuesta JSON.

La respuesta podría ser enorme, por lo que necesito comprimir la respuesta JSON usando gzip.

¿Se pregunta cómo hacer esto en el controlador de rieles?

He añadido la linea

use Rack::Deflater

en config.ru

¿Debería también estar cambiando algo en la línea que hace JSON?

render :json => response.to_json()

Además, ¿cómo verifico si la respuesta está en formato gzip o no ...?

Hice una solicitud de enrollamiento desde el terminal, solo veo el JSON normal.


En algunos casos, puedes considerar escribir una gran respuesta en un archivo y gzip:

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

y actualiza este archivo regularmente


Mi publicación Content Compression with Rack :: Deflater describe un par de formas de integrar Rack :: Deflater. Lo más fácil sería simplemente actualizar config/application.rb con:

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

y comprimirá automáticamente todas las respuestas del controlador con deflate / gzip si el cliente explícitamente dice que pueden manejarlo.


Para que la respuesta esté en formato gzip, no tenemos que cambiar la llamada al método de render .
Si la solicitud tiene el encabezado Accept-Encoding: gzip , Rails comprimirá automáticamente la respuesta JSON utilizando gzip.

Si no desea que el usuario envíe una solicitud con un encabezado preestablecido, puede agregar el encabezado a la solicitud manualmente en el controlador antes de representar la respuesta:

request.env[''HTTP_ACCEPT_ENCODING''] = ''gzip'' render :json => response.to_json()


Puedes consultar Curl configurando un encabezado personalizado para obtener una respuesta comprimida.

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

luego, descomprímelo para ver la respuesta real json

$ gzip -d posts_json.gz $ cat posts_json

Si no funciona. Vuelva a publicar con salida de rake middlewares de rake middlewares para ayudarnos a solucionar más problemas.