【问题标题】:Defer exceptions in multiple rake tasks在多个 rake 任务中延迟异常
【发布时间】:2014-06-29 04:18:04
【问题描述】:

我是 Rake 的新手。

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

我的问题是:我希望在多个测试失败的情况下最后引发一个异常。

这似乎是一个简单的问题,但我担心在谷歌搜索后我找不到一个干净的方法。

一种解决方案可能是使用多个开始、救援块和一个全局变量?

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

我还是觉得一定有更好的办法?

【问题讨论】:

    标签: ruby rake rake-task


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2015-09-14
      相关资源
      最近更新 更多