从任务中访问 Rake 任务描述

问题描述 投票:0回答:2

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

desc "Populate DB"
task populate: :environment do
  puts task.desc # "Populate DB"
end
ruby rake
2个回答
22
投票

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行设置。

.comment
vs
.full_comment

对于那些想知道的人,

.comment
打印第一行,
.full_comment
将打印所有行(对于多行
desc
),并在返回的字符串中用
\n
指示新行。

请参阅此处的文档:


3
投票

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

非常重要的是

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

© www.soinside.com 2019 - 2024. All rights reserved.