我可以将对象或值从一个rake任务传递到另一个吗?

时间:2013-08-31 14:59:56

标签: ruby rake

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

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

1 个答案:

答案 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]