Подтвердить что ты не робот

Как профилировать задачу Rake?

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

Но как мне настроить конкретную задачу Rake?

4b9b3361

Ответ 1

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

Учитывая ваш вызов 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

Ответ 2

Если вы хотите "грубо" профилировать и хотите выяснить, какая задача является узким местом, я предлагаю Майк Уильям отличный фрагмент кода здесь, Он работал красиво, когда я выполнял профилирование задач 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