Как профилировать задачу Rake? - PullRequest
19 голосов
/ 17 ноября 2010

Мне нужно профилировать грабли. Потому что я нуб, я знаю только, как профилировать .rb код как это: ruby -Ilib -S ruby-prof -p graph_html profile.rb > profile.html

Но как мне профилировать конкретную задачу Rake?

Ответы [ 3 ]

19 голосов
/ 01 декабря 2010

Rake - это всего лишь скрипт Ruby, поэтому вы можете просто вызывать ruby-prof для rake, точно так же, как вы профилируете любой другой скрипт.

Учитывая ваш вызов ruby-prof, попробуйте:

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

Я только что использовал следующую командную строку:

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

Для профилирования вызова:

rake19 import_from_aws file=~/sourcedata batch=test1
1 голос
/ 20 августа 2012

Если вы хотите «грубое» профилирование и хотите выяснить, какое задание является узким местом, я предлагаю отличный код Майка Уильяма из здесь .Это прекрасно работало, когда я профилировал свои задания 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
0 голосов
/ 27 июня 2018

Я думаю, стоит упомянуть, что вы, возможно, захотите профилировать его, используя bundle, а не rake напрямую, если вы пользуетесь bundler.

ruby-prof -p graph_html `which bundle` -- 'exec' 'rake' '-T' > profile.html

...