【问题标题】:Call a Rake task repeatedly重复调用 Rake 任务
【发布时间】:2019-12-22 22:37:40
【问题描述】:

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

【问题讨论】:

    标签: ruby rake rake-task


    【解决方案1】:

    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
    

    【讨论】:

    • OSS是什么意思?
    • 开源软件。
    • 也感谢分享Class#tap
    猜你喜欢
    • 2017-06-10
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多