2010-05-25 14 views
1

Je pense que c'est un très facile, mais je n'arrive pas à faire les choses correctement. Fondamentalement, j'essaie d'utiliser le middleware Rack pour définir un en-tête Cache-Control par défaut dans toutes les réponses servies par mon application Sinatra. Il ressemble à rack :: ResponseHeaders devrait être en mesure de faire exactement ce que j'ai besoin, mais je reçois une erreur lors d'une tentative d'utiliser la syntaxe démontré here dans mon fichier rackup:Rack :: ResponseHeaders dans rackup pour Sinatra

use Rack::ResponseHeaders do |headers| 
    headers['X-Foo'] = 'bar' 
    headers.delete('X-Baz') 
end 

j'ai pu obtenir rack :: cache pour travailler avec succès comme suit:

use Rack::Cache, 
    :default_ttl => 3600 

Cependant, cela n'obtient pas exactement la sortie que je veux, alors rack :: ResponseHeaders donne un contrôle fin des en-têtes. Pour info, mon site est hébergé sur Heroku, et les gemmes Rack requises sont spécifiées dans mon manifeste .gems.

Merci!

Mise à jour: Après avoir fait quelques recherches, il semble que la première question est que rack :: ResponseHeaders ne figure pas dans la version rack contrib (0.9.2) qui a été installé. Je commencerai par regarder ça.

Répondre

5

Au cas où quelqu'un serait intéressé, j'ai réussi à faire fonctionner cela. Il ne ressemblait pas qu'il y aurait un moyen facile d'installer rack-contrib-0.9.3 sur Heroku, mais le seul fichier que je avais besoin était response_headers.rb, donc je simplement copié ceci dans mon répertoire du projet et modifié mon rackup comme suit:

require 'rack/contrib/response_headers' 

# set default cache-control header if not set by Sinatra 
use Rack::ResponseHeaders do |headers| 
    if not headers['Cache-Control'] 
     headers['Cache-Control'] = "public, max-age=3600" 
    end 
end 

Cela définit un âge maximal par défaut de 1 heure sur les objets pour lesquels je ne spécifie pas un en-tête Cache-Control explicite dans Sinatra – à savoir, les actifs statiques.