首页 > 解决方案 > 重复调用 Rake 任务

问题描述

我有一个 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 运行这两个任务?

标签: rubyrakerake-task

解决方案


rake是OSS,顺便说一句。

Rake::Task#invoke检查该任务是否先前未被调用,如果是则提前返回。我不太了解rake,但重置此实例变量应该可以解决问题。

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

推荐阅读