从任务中访问Rake任务描述

在rake任务中,如何查询描述? 会给出的东西:

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

task必须定义为任务块的参数。

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

编辑:此解决方案适用于rake 0.8.7。 至少rake 0.9.2.2需要额外的Rake::TaskManager.record_task_metadata = true (我只检查了这两个版本)。

一个独立的ruby脚本与适应:

 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 

原因:在rake/task_manager.rb第30行(rake 0.9.2.2)中是一个检查

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

默认值false在第305行中设置。

有类似的问题,我想向用户显示一个自定义的帮助屏幕。 这里的答案对我帮助很大。

非常重要的是

 Rake::TaskManager.record_task_metadata = true 

在第一个任务定义之前完成。

那你可以做

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

通过调查https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284可以找到详细信息