2010-12-01 5 views
2

は、私は、同じクエリの数百を生成している単一の要求を持っている:railsのクエリキャッシュが機能しないのはなぜですか?私の開発環境で

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 

これはなぜでしょうか? Railsはリクエストごとにデフォルトでクエリキャッシュを有効にすると考えられました。

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

クエリは運用環境でキャッシュされていますか? –

答えて

3

あなたが複数のデータベースに接続している場合は(たとえば、特定のモデルでestablish_connectionを使用することによって)、それだけではActiveRecord :: Base.connectionは、クエリキャッシュが有効になると思われます。それがここに当てはまるかどうかは確かではありませんが、確かに複数のDBに接続する際の厄介な副作用です。

+0

ちょうどこれを追加するには、キャッシュされるコードの周りにYourRecord.cache {}を手動で使用する方法があります。キャッシュはブロックの最後に消去されるので、ブロックが終了する前にキャッシュされた繰り返しのクエリが実行されていることを確認してください。 –

+0

@MattZukowski、あなたはそれがレールのバグかどうか考えていますか? – Fivell