2011-01-27 15 views
7

Ho un'applicazione abbastanza semplice (solo un file index.html e un file css - è davvero solo una pagina statica) ospitata su Heroku.Come impostare le intestazioni della risposta HTTP (cache) in un'app Sinatra ospitata su Heroku

Io uso Sinatra per ospitarlo su Heroku. La 'app' è piuttosto semplice:

require 'rubygems' 
require 'sinatra' 

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

La domanda è, come si imposta l'intestazione della risposta HTTP per le risorse statiche? In particolare, volevo impostare l'intestazione Expires per scopi di memorizzazione nella cache.

EDIT: Sto cercando di aggiungere al collettore stesso ai beni statici (per esempio, quella che risiede sotto /public, come le immagini di sfondo, icone, ecc)

risposta

16

A parte il fatto che non avrei passare attraverso lo stack Sinatra solo per servire file statici, si chiamerebbe

cache_control :public, max_age: 60 

per memorizzare per un minuto. cache_control è un helper that comes with Sinatra.

Altrimenti, suggerirei di dare un'occhiata a http://www.sinatrarb.com/configuration.html per vedere come si imposta Sinatra in modo da non avere a che fare con i file statici.

Spero che questo aiuti.

modifica: ho appena visto che stavi richiedendo esplicitamente l'intestazione Expires. Non sono sicuro, ma dovrebbe essere lo stesso di Cache-Control. Scusa per la confusione

+0

come faresti allora? Supponendo che voglio ancora che sia ospitato su Heroku. – ryanprayogo

+0

Nota che Heroku suggerisce 'Cache-Control' nei loro documenti (vedi http://docs.heroku.com/http-caching), e Headhunter è ospitato lì. Io userei 'response ['Expires'] ='. Si noti che 'Scade' è specificato come tempo assoluto, non relativo alla richiesta (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21) – awendt

+1

Sinatra in realtà ha un aiuto specifico per questo : 'cache_control: public,: max_age => 60' –

5

Come espansione della risposta di @ awendt, Sinatra può effettivamente gestire file statici senza dover definire esplicitamente il percorso e stampare il file.

Aggiungendo:

set :static, true 

..non puoi aggiungere la tua index.html e stylesheet.css in una cartella public/. Quindi quando visiti lo http://localhost:9292/stylesheet.css ti verrà fornito il file statico.

Se si desidera utilizzare un altro nome di cartella, invece di quello predefinito public/, quindi provare:

set :public, "your_folder_name" 

Se vogliamo essere meno esplicita possiamo semplicemente creare la cartella public/ nella consapevolezza che Sinatra consentirà :static per noi comunque :)

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

Problemi correlati