Access Rake Task Description from within Task

女生的网名这么多〃 提交于 2020-01-01 04:26:44

问题


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



来源:https://stackoverflow.com/questions/8781263/access-rake-task-description-from-within-task

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!