2

我有一系列 rake 任务,它们为多个对象播种并根据电子表格中的数据执行某些操作。不过,该系列的第一个任务是验证电子表格并检查所有数据的格式是否正确。我有一个任务一个接一个地运行该系列中的所有任务,但我想对其进行更改,以便如果工作表无效,它将在工作表验证后中止所有任务,我该怎么做?

我本质上希望在工作表验证任务和运行所有任务的总体任务之间进行某种形式的通信。这样做的红宝石方法是什么?

4

1 回答 1

0

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]
于 2013-08-31T15:39:12.410 回答