如何为现有的Rake任务添加异常处理?

时间:2018-07-23 12:12:05

标签: ruby rake rake-task

我想挽救外部gem提供的rake任务引发的异常。

理想情况下,我想创建一个名称相同的rake任务,该任务将调用原始任务并仅处理异常。像这样:

original_task = Rake.application.tasks.find { |t| t.name == "original_namespace:original_task" }
Rake::Task["original_namespace:original_task"].clear

namespace :original_namespace do
  task original_task: :environment do
    begin
      original_task.invoke
    rescue SystemExit
      # do something
    end
  end
end

这行不通,因为似乎您不能仅复制rake任务并将其保存在内存中。

1 个答案:

答案 0 :(得分:2)

这将是一个过大的杀伤力,但它应该起作用:

Rake::Task.prepend(Module.new do
  def invoke(*args)
    case name
    when "original_namespace:original_task"
      begin
        super(*args)
      rescue => e
        Logger.warn("Task failed, rescued")
      end
    else super(*args)
    end
  end
end)

一旦将其添加到初始化程序中的某个位置,它应该使其自动挽救相应的异常。