定制"需要?" Rake任务的条件

时间:2017-01-20 03:21:32

标签: ruby rake

AFAIK,Rake有两种类型的任务:Rake::Task无条件运行,而Rake::FileTask只有在命名的文件不存在时才会运行,或者更早的运行它的先决条件。

是否有传统方法来自定义决定任务是否需要运行的逻辑?例如,如果我不仅要验证文件的存在,还要以某种方式测试其内容。

我可以看到方法Rake::Task#needed?处理这个问题,并且在子类中覆盖它确实有效。但有没有更惯用的方法呢?哪个更适合直接包含在Rakefile

我想象这样的事情:

need :process do
    # Check if file is already processed
end

task :process do
    # Process file in-place
end

如果所有need块都返回true,它将跳过该任务。

1 个答案:

答案 0 :(得分:1)

  

是否有一种传统的方法来自定义决定a的逻辑   任务需要运行吗?

;一种方法是:

  • 宣布"所需的任务"作为task_1,如果需要操作,则让它exist
  • 宣布"辅助任务" task_2prerequisitetask_1

所以你的rake文件就像:

# check if needed is done
def needed_done?     
  return false  # TODO: edit checking logic
end

desc "do prerequisite stuff"
task :do_needed do
  p "do needed stuff"
  unless needed_done?
    p "needed stuff wasn't done ^^'"
    exit 1
  end
end

desc "process other stuff, if prerequisite is meet"
task :process  => [:do_needed] do
  p "process other stuff"
end

现在,您使用以下命令运行任务process

rake process
如果do_needed然后needed_done?将会运行,

process将自动先运行,否则您将在不运行的情况下退出