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,它将跳过该任务。
答案 0 :(得分:1)
是否有一种传统的方法来自定义决定a的逻辑 任务需要运行吗?
是强>;一种方法是:
task_1
,如果需要操作,则让它exist task_2
与prerequisite:task_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
将自动先运行,否则您将在不运行的情况下退出