web-dev-qa-db-fra.com

Ruby sur Rails: effacer une page mise en cache

J'ai une application RoR (Ruby v1.8.7; Rails v2.3.5) qui met en cache une page dans l'environnement de développement. Ce ne serait pas vraiment un problème, mais la page mise en cache a les éléments sont incorrects.

Je n'ai apporté aucune modification au fichier development.rb et je n'ai sciemment ajouté aucune commande de mise en cache aux contrôleurs.

J'ai essayé d'effacer le cookie du navigateur (Firefox 3.5 sur OSX) et les caches de page pour ce site (localhost). J'ai également redémarré Mongrel. Rien ne semble aider.

Qu'est-ce que je rate?

75
craig

Cette ligne dans development.rb garantit que la mise en cache ne se produit pas.

config.action_controller.perform_caching             = false

Vous pouvez vider le cache Rails avec

Rails.cache.clear

Cela dit, je ne suis pas convaincu qu'il s'agisse d'un problème de mise en cache. Modifiez-vous la page sans la voir reflétée? Vous ne regardez peut-être pas la version en direct de cette page? Je l'ai fait une fois (rougir).

Mise à jour:

Vous pouvez appeler cette commande depuis la console. Êtes-vous sûr que vous utilisez l'application en développement?

La seule alternative est que la page que vous essayez de rendre ne soit pas la page en cours de rendu.

Si vous regardez la sortie du serveur, vous devriez pouvoir voir la commande de rendu lorsque la page est rendue comme ceci:

Rendered shared_partials/_latest_featured_video (31.9ms)
Rendered shared_partials/_s_invite_friends (2.9ms)
Rendered layouts/_sidebar (2002.1ms)
Rendered layouts/_footer (2.8ms)
Rendered layouts/_busy_indicator (0.6ms)
117
Apie

rake tmp:cache:clear pourrait être ce que vous cherchez.

104
Karen

J'ai pu résoudre ce problème en nettoyant le cache de mes ressources:

$ rake assets:clean
24
Dan

Recherchez une version statique de votre page dans/public et supprimez-la si elle existe. Lorsque Rails 3.x met en cache des pages, il laisse une version statique dans votre dossier public et le charge lorsque les utilisateurs accèdent à votre site. Cela restera même après que vous aurez effacé votre cache.

4
David Harbage

Si vous faites fragment fragmenting , vous pouvez manuellement casser le cache en mettant à jour votre clé de cache, comme suit:

Version 1

<% cache ['cool_name_for_cache_key', 'v1'] do %>

Version 2

<% cache ['cool_name_for_cache_key', 'v2'] do %>

Ou vous pouvez également réinitialiser automatiquement le cache en fonction de l'état d'un objet non statique, tel qu'un objet ActiveRecord, comme suit:

<% cache @user_object do %>

Avec cette méthode, chaque fois que l'objet utilisateur est mis à jour, le cache est automatiquement réinitialisé.

2
jeffdill2