155 votes

Comment faire pour empêcher la mise en cache de la page de navigateur dans les Rails

Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3

La partie principale de mon site répond à vos clics. Donc, si vous cliquez sur un lien, il va vous envoyer à la destination, et instantanément régénérer votre page.

Mais, si vous touchez le bouton de retour, vous ne voyez pas la nouvelle page. Malheureusement, il ne l'est pas sans un rafraîchissement manuel; il semble que le navigateur est mise en cache. Je veux assurez-vous que le navigateur ne prend pas en cache de la page.

Par ailleurs, je ne veux pour définir les futures dates d'expiration pour tous mes statique actifs.

Quelle est la meilleure façon de résoudre ce problème? Dois-je résoudre ce dans les Rails? Apache? Javascript?

Merci à tous pour votre aide, Jason


Hélas. Aucune de ces suggestions forcé le comportement, je suis à la recherche pour.

Peut-être il y a un javascript réponse? Je pourrais avoir des rails écrire un timestamp dans un commentaire, alors le javascript vérifier pour voir si les temps sont dans les cinq secondes (ou tout ce qui fonctionne). Si oui, alors tout va bien, mais si non, puis de recharger la page?

Pensez-vous que cela pourrait fonctionner?

Merci à tous pour votre aide,

Jason

344voto

Jason Butler Points 2820

15voto

Sacre Points 121

3voto

erik Points 3923

J’ai utilisé cette ligne avec un certain succès dans le contrôleur. Il fonctionne dans Safari et Internet Explorer, mais je n’ai pas vu fonctionner avec Firefox.

Pour votre deuxième point, si vous utilisez les méthodes d’assistance rails comme

et laisser les paramètres par défaut sur votre serveur Web, les actifs sont généralement mises en cache assez bien.

1voto

Roman Points 7430

L’aspirateur moyen serait d’écrire un middleware Rack, qui remplace l’en-tête Cache-Control basée sur une logique (par exemple, que pour le type mime application/xml). Ou, pour un plus laid, mais ne fonctionne toujours approche, on pourrait changer la constante ActionDispatch::Response::DEFAULT_CACHE_CONTROL « no-cache ». Bien sûr, si la granularité contrôleur et/ou d’action est nécessaire, alors il est préférable de faire cela dans le contrôleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X