Ruby 如何将异常处理添加到现有的Rake任务中?

Ruby 如何将异常处理添加到现有的Rake任务中?,ruby,rake,rake-task,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_namespa

我想挽救由外部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任务并将其保存在内存中。

这可能是一种过激行为,但它应该起作用:

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)

一旦在初始值设定项中的某个位置添加,它应使其自动拯救相应的异常。

这将是一种过激行为,但它应能工作:

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)

一旦在初始值设定项中的某个位置添加,它应该能够自动地拯救相应的异常。

很抱歉,它不起作用。此代码(保存在初始值设定项中)甚至不会执行。然后发现在任务初始化过程中肯定加载了什么,并将代码放在那里。我对Rails有点了解。你可以把它放在耙子里。对不起,它没用。此代码(保存在初始值设定项中)甚至不会执行。然后发现在任务初始化过程中肯定加载了什么,并将代码放在那里。我对Rails有一点了解。你可以把它放在耙子里。