如何在 rake 任务中捕获引发的异常

How to catch raised exception in rake task

我有一个循环遍历 CSV 文件中的行的 rake 任务,在该循环中,有一个 begin/rescue 块来捕获任何可能引发的异常。但是当我 运行 它时,它一直在说 'rake aborted!' 并且它没有进入救援块

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      # call to mymethod
    rescue => ex
      puts "#{ex} error executing task"
    end
  end
end
...
def mymethod(...)
  ...
  begin
    response = RestClient.post(...)
  rescue => ex
    raise Exception.new('...')
  end
end

预期:它应该完成循环 CSV 的所有行

实际结果:它在到达 'raise' 异常后停止说:

rake aborted!

Exception: error message here

...

Caused by:

RestClient::InternalServerError: 500 Internal Server Error

可以使用next跳过循环错误的步骤:

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      method_which_doing_the_staff
    rescue SomethingException
      next
    end
  end
end

并在您的方法中引发异常:

def method_which_doing_the_staff
  stuff
  ...
  raise SomethingException.new('hasd')
end

我通过注释掉引发异常的行解决了这个问题,因为它似乎是目前最快的解决方法。

# raise Exception.new('...')

如果有更好的方法,我仍然愿意接受其他建议。