在多个rake任务中推迟异常

时间:2014-06-29 04:18:05

标签: ruby rake rake-task

我是Rake的新手。

我正在编写一系列测试来验证存储在YAML文件中的数据。每个测试都是一个单独的rake任务。

我的问题是:我希望在多次测试失败的情况下最后提出一个例外。

这似乎是一个简单的问题,但我害怕经过大量的谷歌搜索,我找不到一个干净的方法去做。

一种解决方案可能是使用多个begin,rescue block和一个全局变量?

status = 0

desc 'task 1'
task :task_1 do
  begin
    raise if something_is_bad
  rescue
    puts "something is bad"
    status += 1
  end
end

desc 'task 2'
task :task_2 do
  begin
    raise if something_else_is_bad
  rescue
    puts "something else is bad"
    status += 1
  end
end

desc 'default task'
task :default do
  Rake::Task['task_1'].execute
  Rake::Task['task_2'].execute
  if status
    raise "There were errors"
  end
end

这似乎导致重复开始,救援。

另一种解决方案可能是使用错误处理方法吗?

status = 0

def handle_failure(status, message)
  status += 1
  puts message
end

desc 'task 1'
task :task_1 do
  handle_failure(status, "something is bad") if something_is_bad
end

desc 'task 2'
task :task_2 do
  handle_failure(status, "something else is bad") if something_else_is_bad
end

desc 'default task'
task :default do
  Rake::Task['task_1'].execute
  Rake::Task['task_2'].execute
  if status
    raise "There were errors"
  end
end

我仍然觉得必须有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

根据您的要求,这大致是我会如何处理的。

desc 'task 1'
task :task_1 do
  if something_is_bad
    puts "something is bad"
    raise
  end
end



task :default do
  failed = false
  %W(task_1 task_2).each do |task|
    begin
      Rake::Task[task].execute
    rescue
      failed = true
    end
  end
  puts "One of the tasks failed!" if failed
end