Almacenamiento en caché exclusivo del lado del servidor de Rails.app con Rack::Cache

Tengo el siguiente problema: quiero almacenar en caché el resultado de una acción en Redis. Por esta razón, uso https://github.com/jodosha/redis-rack-cache. El hecho de que Rack::Cache deba almacenar en caché una acción se determina configurando la información de encabezado HTTP adecuada en Rails, por ejemplo:

response.headers['Cache-Control'] = 'max-age=3600, public, must-revalidate'

Ahora, Rack::Cache almacenará correctamente en caché la respuesta en Redis. Sin embargo, este encabezado también le dice al cada navegador almacenar en caché la respuesta, que no ¡querer! La solicitud debe almacenarse en caché exclusivamente en el lado del servidor.

Como solución, estoy reemplazando el encabezado en nginx, que uso como proxy inverso, pero debe haber una forma más elegante. ¿Alguien sabe cómo hacerlo?

Saludos cordiales, Martin

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

Una opción sería escribir su propio middleware que se encuentra arriba de Rack::Cache y luego elimina estos encabezados de Cache-Control de la respuesta.

Algo tan simple como:

  def call(env)
    status, headers, body = @app.call(env)
    headers.delete("Cache-Control")
    [status, headers, body]
  end

funcionaría como un middleware.

contestado el 03 de mayo de 12 a las 20:05

Hmm, está bien, sin embargo, esto sería solo un poco más elegante que mi solución existente con nginx :/ - calamarfunk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.