Ruby - 错误处理 - 良好实践

时间:2011-12-07 21:26:35

标签: ruby exception logging

这更像是一个以意见为导向的问题。处理嵌套代码中的异常时,例如:

  • 假设您有一个初始化另一个类来运行作业的类。作业返回一个值,然后由最初调用它的类处理。

您将在何处放置异常和错误记录?您是否会在调用类中的作业类初始化时定义它,它将在作业执行或两个级别处理异常?

2 个答案:

答案 0 :(得分:1)

如果作业处理异常,那么您不需要在try catch中包含对作业的调用。

但初始化和运行作业的类可能会抛出异常,因此您也应该处理该级别的异常。

这是一个例子:

def some_job
   begin
     # a bunch of logic
   rescue
     # handle exception
     # log it 
   end
end

这样做是没有意义的:

def some_manager
  begin
    some_job
  rescue
    # log 
  end
end

但这样的事情更有意义:

def some_manager
  begin
    # a bunch of logic
    some_job
    # some more logic
  rescue
    # handle exception
    # log 
  end
end

当然你想要捕捉特定的例外情况。

答案 1 :(得分:1)

一般来说,处理Ruby中的异常的最佳答案可能是阅读Exceptional Ruby。它可能会改变您对错误处理的看法。

话虽如此,你的具体情况。当我听到“背景过程”中的“工作”时,所以我的答案就是基于此。

你的工作将要在报告状态时报告状态。这可能是“在队列中”,“正在运行”,“已完成”等状态,但它也可以提供更多信息(面向用户)的信息:“处理1000条记录中的前100条”。

因此,如果您的后台流程发生错误,我的建议是双重的:

  1. 确保在退出作业之前捕获异常。您的后台作业处理器可能不喜欢来自您的代码的随机异常。我个人喜欢捕获异常并将其保存到数据库的想法,以便以后轻松检索。然后,根据您的后台作业处理器,它可能会为您处理错误报告。 (我认为reque确实如此)。

  2. 在前端,使用AJAX(或其他东西)偶尔检查作业的工作方式。每10秒说一次。除了获取作业状态之外,还要确保将此附加信息返回给用户(如果适用)。