J'ai une action que je cache à l'aideComment obtenir caches_action pour définir les en-têtes expirés lorsqu'il y a un hit dans memcached?
caches_action :my_action, :expires_in=>1.hours
et également définir les expires têtes dans l'action elle-même en utilisant
def my_action
...
expires_in 1.hours
send_data(...,:disposition => 'inline',:type => 'image/png',:filename => params[:title]+".png")
end
Cependant, quand je regarde l'en-tête de réponse de contrôle du cache d'un résultat vient à la suite d'un coup memcached, je reçois ceci:
Cache-Control: private, max-age=0, must-revalidate
la première fois ronde, à savoir quand il n'y a rien dans le cache, il est wha t Je pense, i.e. .:
Cache-Control: max-age=3600, private
Il ressemble à rails + memcached est ni la mise en cache les en-têtes de réponse d'origine, ni la mise en-têtes appropriés lui-même. Le résultat est que le client fait une requête au serveur chaque fois que le résultat (une image) n'a pas changé. Bien que l'action se termine rapidement quand elle reçoit un coup dans le cache, elle finit toujours par envoyer toutes les données, ce que je voudrais éviter.
Comment puis-je obtenir les en-têtes pour faire la bonne chose afin que le client ne fasse aucune demande en premier lieu, ou obtient une réponse «non modifié»?
oui la mise en cache est configurée et fonctionne correctement - le problème est le deuxième qui survient lorsqu'il y a un hit dans le memcache, les en-têtes ne sont pas configurés. aussi sur le second tour, l'action ne serait pas invoquée à cause du hit de memcache donc je suppose que le troisième fragment de code n'aura aucun effet. – frankodwyer
Oh je vois. J'ai eu votre problème dans le mauvais sens. C'est étrange. Pouvez-vous poster les fragments pertinents des journaux? – askegg
Selon ce post, Rails peut supposer un document HTML, la clé peut ne pas correspondre à votre requête. Juste une pensée. http://gilesbowkett.blogspot.com/2007/07/little-rails-image-caching-caveat.html – askegg