2010-12-01 9 views
2

Dans mon environnement de développement J'ai une seule demande qui génère des centaines de requêtes les mêmes:Pourquoi la mise en cache des requêtes sur les rails ne fonctionne-t-elle pas?

Person Load (24.4ms) SELECT "persons".* FROM "persons" WHERE ("persons"."person_id" = 517) LIMIT 1 
. . . 
Person Load (64.4ms) SELECT "persons".* FROM "persons" WHERE ("persons"."person_id" = 517) LIMIT 1 

Pourquoi est-ce? Je pensais que Rails était censé activer la mise en cache des requêtes par défaut, par requête?

config/development.rb: 
config.cache_classes = false 
config.perform_caching = true  
. . .  
# Show full error reports and disable caching 
config.consider_all_requests_local  = true 
config.action_view.debug_rjs    = true 
config.action_controller.perform_caching = true 
config.active_support.deprecation  = :log 
+0

Les requêtes sont-elles mises en cache dans l'environnement de production? –

Répondre

3

Si vous vous connectez à plusieurs bases de données (par exemple en utilisant establish_connection dans certains modèles), il semble que seul le ActiveRecord :: Base.connection obtient la mise en cache de requête activée. Je ne sais pas si c'est le cas ici, mais certainement un effet secondaire difficile de se connecter à plusieurs DB.

+0

Juste pour ajouter à cela, le moyen de contourner cela semble être d'utiliser manuellement YourRecord.cache {} autour du code que vous voulez mettre en cache. Gardez à l'esprit que le cache sera effacé à la fin du bloc, alors assurez-vous que toutes les requêtes répétées que vous voulez mettre en cache sont exécutées avant la fermeture du bloc. –

+0

@MattZukowski, considérez-vous que les rails sont bug ou non? – Fivell

Questions connexes