我有一系列 rake 任务,它们为多个对象播种并根据电子表格中的数据执行某些操作。不过,该系列的第一个任务是验证电子表格并检查所有数据的格式是否正确。我有一个任务一个接一个地运行该系列中的所有任务,但我想对其进行更改,以便如果工作表无效,它将在工作表验证后中止所有任务,我该怎么做?
我本质上希望在工作表验证任务和运行所有任务的总体任务之间进行某种形式的通信。这样做的红宝石方法是什么?
abort
您可以通过调用任何任务来中止 rake 执行。通过使用依赖关系,如果前面的任何一个任务失败,以下任务将永远不会被执行。
task :validate do
abort "validation failed"
end
task :second do
puts "never executed"
end
task :default => [:validate, :second]
编辑
关于参数,我建议使用一个保持状态的类,这样你就不必传递参数:
class Spreadsheet
def initialize(args)
# ...
end
def validate
false
end
end
task :init do
@spreadsheet = Spreadsheet.new("something")
end
task :first do
unless @spreadsheet.validate
abort "validation failed"
end
end
task :second do
puts "never executed"
end
task :default => [:init, :first, :second]