我有一个 Rails 3 应用程序,它使用 exception_notification gem 发送有关异常的电子邮件。
我还想在发生异常时向用户显示特定的错误消息,但是通过捕获通用异常,因为我不确定可能发生的所有异常。我在想这样做的方法是从异常中拯救出来,然后引发一个自定义异常。这样我仍然会收到有关异常的电子邮件,并且用户可以看到自定义异常的错误页面。
这听起来像 Rails 3 的做事方式吗?
非常感谢。
我有一个 Rails 3 应用程序,它使用 exception_notification gem 发送有关异常的电子邮件。
我还想在发生异常时向用户显示特定的错误消息,但是通过捕获通用异常,因为我不确定可能发生的所有异常。我在想这样做的方法是从异常中拯救出来,然后引发一个自定义异常。这样我仍然会收到有关异常的电子邮件,并且用户可以看到自定义异常的错误页面。
这听起来像 Rails 3 的做事方式吗?
非常感谢。
我想不是。
正如瑞恩戴维斯所说
不要拯救异常。曾经。否则我会刺伤你。
有关该声明的更多信息在这里。
Rails 3.2 在两个中间件中进行异常处理:
你可以通过运行来检查那个
$ rake middleware
在生产中用于呈现异常页面。
在开发环境中用于在发生异常时呈现详细的堆栈跟踪。停止中间件调用链并呈现堆栈跟踪,如果action_dispatch.show_detailed_exceptions
更准确的话。
所以用这个中间件做一些正常的事情的最简单的方法是猴子修补 的call
方法ActionDispatch::DebugExceptions
,做你需要做的所有事情,然后调用原始方法。
但是,更好的方法是在这两者之间包含您自己的中间件。在其中,您会将调用包装在救援块中并进行自定义处理。
我是Airbrake的维护者,这正是我们现在正在做的事情。
您可能还想检查Errbit,这是自托管的替代方案。