2011-11-23 11 views

Respuesta

14

función de su entorno, Rastrillo registrará consultas SQL al igual que cualquier proceso de rieles se & en el mismo archivo de registro. Por lo tanto, en su cuadro de desarrollo, verifique su archivo log/development.log - contendrá las consultas de su tarea Rake. Si desea consultas registradas en producción, configure el nivel de registro en su tarea de Rake para DEPURAR, y asegúrese de que la tarea de rake dependa de: environment.

desc "Task with SQL logging" 
task :test_log => :environment do 
    Rails.logger.level = Logger::DEBUG 
    Your code here... 
end 
+3

ah, veo que están en development.log, gracias – mbdev

4
rake db:migrate --trace 

El --trace mostrará detalles

+0

no muestra sentencias SQL – Aleksey

+0

'tail -f log/test.log' debe hacer el truco en otra ventana de terminal – drhenner

+0

entonces debería ser la respuesta no' --trace' – Aleksey

3
echo '' > log/development.log 
rake db:migrate:redo VERSION=20141017153933 
cat log/development.log 
0

He intentado todo lo anterior y no podía conseguir que funcione. La sintaxis estaba bien, no hay errores, pero ningún sql llegó a stdout (o el log). Estoy usando rails 3.2. También estoy corriendo en un entorno de producción.

Para ver las consultas SQL generado por mis tareas rastrillo, he utilizado la técnica de encontrar en http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/

En particular, me acaba de insertar este bloque en mi tarea antes de que el find() declaraciones que generaron las consultas SQL que estuve intersted en:

ActiveRecord::Base.connection.class.class_eval do 
    # alias the adapter's execute for later use 
    alias :old_execute :execute 

    # define our own execute 
    def execute(sql, name = nil) 
     print "===== #{sql}\n" 
     old_execute sql, name 
    end 
    end 

Luego pude ver el SQL en stdout. Este no es mi código: a Eugene Wang se le ocurrió esta técnica.

Cuestiones relacionadas