Access Rake Task Description from within Task

2019-03-26 02:07发布

问题:

Within a rake task how does one query the description? Something that would give:

desc "Populate DB"
task populate: :environment do
  puts task.desc # "Populate DB"
end

回答1:

taskmust be defined as a parameter for the task-block.

desc "Populate DB"
task :populate do |task|
  puts task.comment # "Populate DB"
  puts task.full_comment # "Populate DB"
  puts task.name # "populate "
end

Edit: This solution works with rake 0.8.7. At least rake 0.9.2.2 need an additional Rake::TaskManager.record_task_metadata = true (I checked only this two versions).

A stand alone ruby-script with adaption:

gem 'rake'    #'= 0.9.2.2'
require 'rake'

#Needed for rake/gem '= 0.9.2.2'
Rake::TaskManager.record_task_metadata = true

desc "Populate DB"
task :populate do |task|
  p task.comment # "Populate DB"
  p task.full_comment # "Populate DB"
  p task.name # "populate "
end

if $0 == __FILE__
  Rake.application['populate'].invoke()  #all tasks
end

Reason: in rake/task_manager.rb line 30 (rake 0.9.2.2) is a check

  if Rake::TaskManager.record_task_metadata
    add_location(task)
    task.add_description(get_description(task))
  end

The default false is set in line 305.



回答2:

Having a similar problem, that I wanted to show the user a customized help screen. The answer here helped me a lot.

It is very important that

Rake::TaskManager.record_task_metadata = true

is done before the first definition of tasks.

Then you can do

Rake.application.tasks.each do |t|
    printf("%-}s  # %s\n",
           t.name_with_args,
           t.comment)
  end

Details can be found by investigating https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284



标签: ruby rake