这更像是一个以意见为导向的问题。处理嵌套代码中的异常时,例如:
您将在何处放置异常和错误记录?您是否会在调用类中的作业类初始化时定义它,它将在作业执行或两个级别处理异常?
答案 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条”。
因此,如果您的后台流程发生错误,我的建议是双重的:
确保在退出作业之前捕获异常。您的后台作业处理器可能不喜欢来自您的代码的随机异常。我个人喜欢捕获异常并将其保存到数据库的想法,以便以后轻松检索。然后,根据您的后台作业处理器,它可能会为您处理错误报告。 (我认为reque确实如此)。
在前端,使用AJAX(或其他东西)偶尔检查作业的工作方式。每10秒说一次。除了获取作业状态之外,还要确保将此附加信息返回给用户(如果适用)。