2010-11-16 28 views
15

J'ai une application de travail basée sur Ruby et Sinatra qui est déployée sur Heroku.Comment définir les en-têtes HTTP dans l'application Ruby/Sinatra, hébergée sur Heroku?

Je veux profiter de la mise en cache HTTP disponible sur Heroku, qui utilise Varnish.

Je ne suis pas sûr de la meilleure façon de définir les en-têtes et de la bonne syntaxe.

Des réflexions sur la meilleure approche et la meilleure syntaxe?

before do 
    headers "Content-Type" => "text/html; charset=utf8" 
end 

get '/' do 
    headers['Cache-Control'] = 'public, max-age=600' 

    # SOME STUFF HERE 

    haml :home, {:layout => :layout_minfooter} 

end 

Répondre

25

pages Habituellement générées dynamiquement ont pas mise en cache donc l'en-tête

response.headers['Cache-Control'] = 'public, max-age=300' 

est le bon point de départ. Essayez d'utiliser l'un des services "Use a Web-based service" pour voir s'ils apparaissent dans l'en-tête HTTPd renvoyé par votre site.

+0

On dirait que je l'avais réglé correctement, avec les outils liés je pourrais le confirmer. – Neil

+1

Traiter les problèmes de mise en cache est une douleur dans le **, à la fois du côté du client et du serveur. –

+0

Fonctionne bien, 'curl -I http: // localhost: 4567' pour vérifier (linux). –

0

Vous pouvez également accéder aux champs d'en-tête de l'objet de réponse avec cette syntaxe:

response['Cache-Control'] = 'public, max-age=600' 
0

Sinatra vous pouvez utiliser la méthode cache_control:

get '/' do 
    # Cache for 24 hours 
    cache_control :public, max_age: 86400 

    # Your magic goes here 
end