是否可以获取命名空间中所有可用 rake 任务的列表?

发布于 2024-09-13 04:41:57 字数 53 浏览 3 评论 0原文

是否可以从 rake 任务中获取命名空间中的任务列表?一种程序化的“rake -T db”?

Is it possible from within a rake task to get a list of tasks in a namespace? A sort of programatic 'rake -T db' ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我不是你的备胎 2024-09-20 04:41:57

我找到了答案:

tasks = Rake.application.tasks

这将返回一个可以检查的 Rake::Task 对象数组。更多详细信息请访问 http://rake.rubyforge.org/

I've found out the answer:

tasks = Rake.application.tasks

This will return an array of Rake::Task objects that can be examined. Further details at http://rake.rubyforge.org/

给我一枪 2024-09-20 04:41:57

正如您所写,使用 Rake.application.tasks 您可以获得所有任务。

但在命名空间内,您只能选择该命名空间的任务(任务 mytest:tasklist),

并且您可以将任务限制在某个命名空间(任务 tasklist_mytest)。

require 'rake'

namespace :mytest do |ns|

  task :foo do |t|
    puts "You called task #{t}"
  end

  task :bar do |t|
    puts "You called task #{t}"
  end

  desc 'Get tasks inside actual namespace'
  task :tasklist do
    puts 'All tasks of "mytest":'
    puts ns.tasks #ns is defined as block-argument
  end

end

desc 'Get all tasks'
task :tasklist do
  puts 'All tasks:'
  puts Rake.application.tasks
end

desc 'Get tasks outside the namespace'
task :tasklist_mytest do
  puts 'All tasks of "mytest":'
  Rake.application.in_namespace(:mytest){|x|
    puts x.tasks
  }
end

if $0 == __FILE__
  Rake.application['tasklist'].invoke()  #all tasks
  Rake.application['mytest:tasklist'].invoke() #tasks of mytest
  Rake.application['tasklist_mytest'].invoke() #tasks of mytest
end

As you wrote, with Rake.application.tasks you get all tasks.

But inside the namespace, you can select only the tasks of the namespace (task mytest:tasklist)

And you may restrict the tasks to a namespace (task tasklist_mytest).

require 'rake'

namespace :mytest do |ns|

  task :foo do |t|
    puts "You called task #{t}"
  end

  task :bar do |t|
    puts "You called task #{t}"
  end

  desc 'Get tasks inside actual namespace'
  task :tasklist do
    puts 'All tasks of "mytest":'
    puts ns.tasks #ns is defined as block-argument
  end

end

desc 'Get all tasks'
task :tasklist do
  puts 'All tasks:'
  puts Rake.application.tasks
end

desc 'Get tasks outside the namespace'
task :tasklist_mytest do
  puts 'All tasks of "mytest":'
  Rake.application.in_namespace(:mytest){|x|
    puts x.tasks
  }
end

if $0 == __FILE__
  Rake.application['tasklist'].invoke()  #all tasks
  Rake.application['mytest:tasklist'].invoke() #tasks of mytest
  Rake.application['tasklist_mytest'].invoke() #tasks of mytest
end
往事随风而去 2024-09-20 04:41:57

您可以像这样使用 grep 命令

desc 'Test'
task :test do
    # You can change db: by any other namespaces
    result = %x[rake -T | sed -n '/db:/{/grep/!p;}' | awk '{print$2}'] 
    result.each_line do |t|
        puts t # Where t is your task name
    end
end

You can use the grep command like this

desc 'Test'
task :test do
    # You can change db: by any other namespaces
    result = %x[rake -T | sed -n '/db:/{/grep/!p;}' | awk '{print$2}'] 
    result.each_line do |t|
        puts t # Where t is your task name
    end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文