2011-01-27 14 views
7

Tengo una aplicación bastante simple (solo un archivo index.html y un archivo css, en realidad es solo una página estática) alojado en Heroku.Cómo configurar los encabezados de respuesta HTTP (caché) en una aplicación Sinatra alojada en Heroku

utilizo Sinatra a alojarlo en Heroku. La 'aplicación' en sí es bastante simple:

require 'rubygems' 
require 'sinatra' 

get "/" do 
    File.read(File.join('public', 'index.html')) 
end 

La pregunta es, ¿cómo configuro el encabezado de respuesta HTTP para los activos estáticos? En particular, quería configurar el encabezado Expires para el almacenamiento en caché.

EDIT: Estoy buscando para agregar dicha cabecera de los activos estáticos (es decir, el que resida, en /public, como imágenes de fondo, iconos, etc)

Respuesta

16

Aparte del hecho de que no lo haría obtener a través de la pila de Sinatra solo para servir archivos estáticos, llamaría a

cache_control :public, max_age: 60 

caché durante un minuto. cache_control es un helper that comes with Sinatra.

De lo contrario, le sugiero que consulte http://www.sinatrarb.com/configuration.html para ver cómo está configurado Sinatra, por lo que no tiene que ver con la publicación de archivos estáticos.

Espero que esto ayude.

edición: acabo de ver que pedían explícitamente la cabecera Expires. No estoy seguro, pero debería ser exactamente igual que Cache-Control. Lo siento por la confusión

+0

¿cómo hacer entonces? Asumiendo que todavía quiero que se aloje en Heroku. Tenga en cuenta que – ryanprayogo

+0

Heroku sugiere 'cache-Control' en sus documentos (ver http://docs.heroku.com/http-caching), y Headhunter se encuentra alojado allí. Yo usaría 'response ['Expires'] ='. Tenga en cuenta que 'Expires' se especifica como tiempo absoluto, no relativo a la solicitud (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21) – awendt

+1

Sinatra en realidad tiene un ayudante específicamente para este : 'cache_control: público,: max_age => 60' –

5

Como respuesta a una expansión de @ awendt, Sinatra en realidad puede manejar archivos estáticos sin necesidad de siquiera definir explícitamente la ruta e imprimir el archivo.

Añadiendo:

set :static, true 

.you puede añadir su index.html y stylesheet.css a una carpeta public/. Luego, cuando visite http://localhost:9292/stylesheet.css, se le proporcionará el archivo estático.

Si desea utilizar otro nombre de la carpeta, en lugar del predeterminado public/, a continuación, tratar:

set :public, "your_folder_name" 

Si queremos ser menos explícito que puede simplemente crear la carpeta public/ en el conocimiento de que Sinatra permitirá :static para nosotros de todos modos :)

Fuente:http://www.sinatrarb.com/configuration.html#__enabledisable_static_file_routes

Cuestiones relacionadas