我有一系列rake任务,它们会根据电子表格中的数据为多个对象生成种子并执行某些操作。但是,本系列的第一个任务是验证电子表格并检查所有数据的格式是否正确。我有一个任务,一个接一个地运行系列中的所有任务,但我想改变它,以便在工作表验证后,如果工作表无效,它将中止所有任务,我该怎么办?
我基本上希望在工作表验证任务和运行所有任务的总体任务之间进行某种形式的通信。什么是红宝石的方式呢?
答案 0 :(得分:1)
您可以通过在任何任务中调用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]