如何从Rake任务中运行Rake任务?

我有一个根据全局变量$build_type编译项目的$build_type ,它可以是:debug:release (结果放在不同的目录中):

task :build => [:some_other_tasks] do
end

我希望创建一个能够依次用两种配置编译项目的任务,如下所示:

task :build_all do
  [ :debug, :release ].each do |t|
    $build_type = t
    # call task :build with all the tasks it depends on (?)
  end
end

有没有办法像调用方法一样调用任务? 或者我怎样才能达到类似的目的?


如果你需要这个任务作为一个方法,那么使用一个实际的方法怎么样?

task :build => [:some_other_tasks] do
  build
end

task :build_all do
  [:debug, :release].each { |t| build t }
end

def build(type = :debug)
  # ...
end

如果你愿意坚持使用rake的成语,以下是你的可能性,从过去的答案编译而来:

  • 这总是执行任务,但它不执行它的依赖关系:

    Rake::Task["build"].execute
    
  • 这个执行依赖关系,但它只在任务尚未被调用时执行:

    Rake::Task["build"].invoke
    
  • 这首先重置任务的already_invoked状态,允许任务再次执行,依赖关系和所有:

    Rake::Task["build"].reenable
    Rake::Task["build"].invoke
    

    (请注意,已经调用的依赖关系不会被重新执行)


  • 例如:

    Rake::Task["db:migrate"].invoke
    

    task :build_all do
      [ :debug, :release ].each do |t|
        $build_type = t
        Rake::Task["build"].reenable
        Rake::Task["build"].invoke
      end
    end
    

    这应该把你排除在外,我自己也需要同样的东西。

    链接地址: http://www.djcxy.com/p/30301.html

    上一篇: How to run Rake tasks from within Rake tasks?

    下一篇: How can I pass named arguments to a Rake task?