重复调用 Rake 任务

Call a Rake task repeatedly

我有一个 Rake 任务调用许多其他 Rake 任务,一个重复:

task :cycle do
  Rake::Task["db:work"].invoke(0)
  Rake::Task["db:work"].invoke(nil)
end

task :work, [:version,] do |t, args|    
  if args[:version]
    puts " * Migrating to version #{args[:version]}"
  else
    puts " * Migrating to latest version"
  end
end

当我 运行 cycle 任务时,它只 运行 一次 work 任务:

$ rake db:cycle
 * Migrating to version 0

我期望这样:

$ rake db:cycle
 * Migrating to version 0
 * Migrating to latest version

有没有办法强制 Rake 运行 这两个任务?

rake 是 OSS,顺便说一句。

Rake::Task#invoke 检查之前未调用该任务并且 early returns if it was。我不太了解 rake,但重置此实例变量应该可以解决问题。

Rake::Task["db:work"].tap do |task|
  task.invoke(0)
  task.instance_variable_set(:@already_invoked, false)
  task.invoke(nil)
end