2010-11-16 9 views
16

Necesito hacer un perfil de la tarea de rake. Porque soy novato, solo sé cómo perfilar el código .rb , así: ruby -Ilib -S ruby-prof -p graph_html profile.rb > profile.htmlCómo perfilar la tarea de Rake?

Pero, ¿cómo puedo perfilar una tarea de Rake específica?

Respuesta

18

Rake es solo un script de Ruby, por lo que debería poder simplemente llamar a ruby-prof contra rake, de la misma forma que haría un perfil con cualquier otro script.

Dada su invocación de ruby-prof, probar:

ruby -Ilib -S ruby-prof -p graph_html `which rake` TASK > profile.html 

he acabo de utilizar la siguiente línea de comandos:

ruby-prof -p graph_html /usr/local/bin/rake19 import_from_aws file=~/sourcedata batch=test1 > /tmp/profile.html 

al perfil de una invocación:

rake19 import_from_aws file=~/sourcedata batch=test1 
+0

trabajado para mí, gracias! – KIR

+0

El '\' que rake \ '' hace el truco ... No sabía que 'ruby-prof' requería la ruta completa del script de ruby ​​al perfil. –

+2

Para aquellos que usan ** rbenv ** usan 'rbenv which rake' – collimarco

1

Si desea un perfil "grosero" y desea averiguar qué tarea es el cuello de botella, le sugiero la excelente pieza de Mike William código de here. Funcionó muy bien cuando estaba perfilando mis tareas de Rake.

module Rake 
    class Task 
    def execute_with_timestamps(*args) 
     start = Time.now 
     execute_without_timestamps(*args) 
     execution_time_in_seconds = Time.now - start 
     printf("** %s took %.1f seconds\n", name, execution_time_in_seconds) 
    end 

    alias :execute_without_timestamps :execute 
    alias :execute :execute_with_timestamps 
    end 
end 
Cuestiones relacionadas