2009-05-19 8 views
5

sé que en los carriles 2.3.2 consultas de ActiveRecord se almacenan en caché, es decir, se puede ver algo en el registro de desarrollo/producción:Modelos ActiveRecord almacenados en caché en tareas de rake?

CACHE (0.0ms) SELECT * FROM `users` WHERE `users`.`id` = 1 

Me preguntaba si los mismos principios se aplican en el rastrillo tareas.

Tengo una tarea de rake que consultará una gran cantidad de modelos diferentes, y quiero saber si debo implementar mi propio almacenamiento en caché, o si este comportamiento está incluido por defecto.

Además, ¿hay alguna manera de ver las consultas sql que se realizan durante la tarea de rake? Similar a la del registro de desarrollo/producción

Respuesta

1

Se ejecutará una tarea de rastreo en el entorno que especifique, en cuyo caso adoptará las reglas de ese entorno.

Puede configurar el env rieles de la línea de comandos:

RAILS_ENV=test 

registro se puede configurar como parte de rastrillo y debería ver esto en log de sus carriles normales.

2

Usted está hablando de almacenamiento en memoria caché ActiveRecord. Eso también debería funcionar en Tareas de rastreo, siempre que las ejecute en un entorno con el almacenamiento en caché habilitado, p. production. Ver Rails Guide on Caching para ver ejemplos.

Se puede o no ser el tipo adecuado de almacenamiento en caché para su caso:

u1=User.find 1 # loads user1 first time from DB 
u2=User.find 2 # loads user2 first time from DB 
u1again = User.find 1 # loads user1 from cache 
all = User.all # loads user1 and user2 from DB again 
+0

Creo que solo puede ser cierto en los controladores. Aquí hay texto: "es importante tener en cuenta que las cachés de consulta se crean al comienzo de una acción y se destruyen al final de esa acción y, por lo tanto, persisten solo durante la acción". Debe consultar el registro de su entorno (es decir, log/test.log, si toma la respuesta anterior) y verá las repetidas consultas SQL. – chug2k

1

El caché de SQL no está habilitado por defecto para las tareas de rastrillo. Usted puede envolver su código en un bloque de caché, así:

task :foobar => :environment do 
    ActiveRecord::Base.connection.cache do 
    User.find 1 # Will hit the db 
    User.find 1 # Will hit the cache 
    end 
end 

Esto es esencialmente lo que hace Carriles por acciones del controlador. Tenga en cuenta que la caché utiliza tareas de memoria y de rake tiene una tendencia a trabajar con grandes conjuntos de datos, lo que puede ocasionar problemas. Puede optar por excluirse del almacenamiento en caché de partes de su código de forma selectiva, usando uncached

Cuestiones relacionadas