我有一个Rakefile以两种方式编译项目,根据全局变量$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 :invoke_another_task do
  # some code
  Rake::Task["another:task"].invoke
end

其他回答

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

这应该能解决你的问题,我也需要一样的东西。

例如:

Rake::Task["db:migrate"].invoke
task :invoke_another_task do
  # some code
  Rake::Task["another:task"].invoke
end
task :build_all do
  [ :debug, :release ].each do |t|
    $build_type = t
    Rake::Task["build"].execute
  end
end

如果你想让每个任务在没有任何失败的情况下运行,你可以这样做:

task :build_all do
  [:debug, :release].each do |t| 
    ts = 0
    begin  
      Rake::Task["build"].invoke(t)
    rescue
      ts = 1
      next
    ensure
      Rake::Task["build"].reenable # If you need to reenable
    end
    return ts # Return exit code 1 if any failed, 0 if all success
  end
end