Ruby on Rails异常处理基础知识

Ruby on Rails exception handling basics

我有一个Rails 3应用程序,它使用exception_notification gem发送有关异常的电子邮件。

我还想在发生异常时向用户显示特定的错误消息,但是通过捕获一般的异常,因为我不确定可能发生的所有异常。 我在想这样做的方法是从Exception中解救,然后引发一个自定义异常。 这样我仍然收到有关异常的电子邮件,用户可以看到自定义异常的错误页面。

这听起来像是Rails 3的做事方式吗?

非常感谢。


我想不是。

正如莱恩戴维斯所说

Don’t rescue Exception. EVER. Or I will stab you.

这里有关于该声明的更多信息。

Rails 3.2在两个中间件中进行异常处理:

  • ActionDispatch :: ShowExceptions
  • ActionDispatch :: DebugExceptions

您可以通过运行检查一个

1
$ rake middleware

ActionDispatch :: ShowExceptions [来源]

在生产中用于呈现异常页面。

ActionDispatch :: DebugExceptions

在发生环境中用于在发生异常时呈现详细的堆栈跟踪。如果action_dispatch.show_detailed_exceptions为真,则停止中间件调用链并呈现堆栈跟踪更精确。

因此,使用此中间件执行正常操作的最简单方法是对ActionDispatch::DebugExceptionscall方法执行monkeypatching,执行您需要做的所有操作,然后调用原始方法。

但是,更好的方法是在这两者之间包含您自己的中间件。在其中,您可以将调用包装在救援区内并进行自定义处理。

我是Airbrake的维护者,这正是我们现在所做的。

您可能还想检查Errbit,这是自托管的替代方案。