2011-05-27 19 views
11

¿cómo puedo crear el registro de la base de datos para cada tarea de rake sin cambiar el origen de las tareas? Necesito almacenar fecha y hora, nombre de la tarea, parámetros. ¿Hay algún tipo de observador, etc.?Rake: iniciando cualquier tarea ejecutando

Respuesta

18

Puede anular Rake::Task#invoke método en el application.rb:

#application.rb 
module Rake 
    class Task 
    alias_method :origin_invoke, :invoke if method_defined?(:invoke) 
    def invoke(*args) 
     logger = Logger.new('rake_tasks_log.log') 
     logger.info "#{Time.now} -- #{name} -- #{args.inspect}" 
     origin_invoke(*args) 
    end 
    end 
end 

salida para rake test:

2011-05-27 16:57:42 +0300 -- test -- [] 
2011-05-27 16:57:42 +0300 -- test:units -- [] 
2011-05-27 16:57:51 +0300 -- db:test:load -- [] 
2011-05-27 16:57:51 +0300 -- db:schema:load -- [] 
2011-05-27 16:58:19 +0300 -- test:functionals -- [] 
2011-05-27 16:58:49 +0300 -- test:integration -- [] 
+0

10 veces por este consejo – Fivell

+1

Tenga en cuenta que 'origin_invoke' debe ser alimentado con' * args' en lugar de 'args', de lo contrario, todos los argumentos se envolverán en una matriz y se pasarán como primer parámetro de tarea (para tareas sin parámetros, todo funciona bien). – ljank

Cuestiones relacionadas