Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 RubyonRails异常处理基础_Ruby On Rails 3_Exception Handling_Exception Notification - Fatal编程技术网

Ruby on rails 3 RubyonRails异常处理基础

Ruby on rails 3 RubyonRails异常处理基础,ruby-on-rails-3,exception-handling,exception-notification,Ruby On Rails 3,Exception Handling,Exception Notification,我有一个Rails 3应用程序,它使用异常通知gem发送关于异常的电子邮件 我还希望在异常发生时向用户显示特定的错误消息,但捕获一个通用异常,因为我不确定可能发生的所有异常。我认为这样做的方法是从异常中解救出来,然后引发一个自定义异常。这样,我仍然会收到一封关于异常的电子邮件,用户可以看到自定义异常的错误页面 这听起来像Rails的3种方式吗 非常感谢。我想没有 正如Ryan Davis所说 不要拯救例外。曾经否则我会刺你 关于该声明的更多信息 Rails 3.2在两个中间件中执行异常处理:

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

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

这听起来像Rails的3种方式吗

非常感谢。

我想没有

正如Ryan Davis所说

不要拯救例外。曾经否则我会刺你

关于该声明的更多信息

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

  • ActionDispatch::ShowExceptions
  • ActionDispatch::调试异常
您可以通过运行

$ rake middleware 
ActionDispatch::ShowExceptions[] 在生产中用于呈现异常页面

ActionDispatch::调试异常[] 在开发环境中用于在发生异常时呈现详细的堆栈跟踪。如果
action\u dispatch.show\u detailed\u exceptions
为true,则停止中间件调用链并呈现堆栈跟踪


因此,使用该中间件进行正常操作的最简单方法是对
ActionDispatch::DebugExceptions
call
方法进行monkeypatch,完成所有需要执行的操作,然后调用原始方法

但是,更好的方法是在这两者之间包含您自己的中间件。在其中,您可以将呼叫包装在一个rescue块中,并进行自定义处理

我是一个维护者,这正是

您可能还需要检查自托管的替代方案。

我想没有

正如Ryan Davis所说

不要拯救例外。曾经否则我会刺你

关于该声明的更多信息

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

  • ActionDispatch::ShowExceptions
  • ActionDispatch::调试异常
您可以通过运行

$ rake middleware 
ActionDispatch::ShowExceptions[] 在生产中用于呈现异常页面

ActionDispatch::调试异常[] 在开发环境中用于在发生异常时呈现详细的堆栈跟踪。如果
action\u dispatch.show\u detailed\u exceptions
为true,则停止中间件调用链并呈现堆栈跟踪


因此,使用该中间件进行正常操作的最简单方法是对
ActionDispatch::DebugExceptions
call
方法进行monkeypatch,完成所有需要执行的操作,然后调用原始方法

但是,更好的方法是在这两者之间包含您自己的中间件。在其中,您可以将呼叫包装在一个rescue块中,并进行自定义处理

我是一个维护者,这正是


您可能还想查看自托管替代方案。

感谢您提供的详细答案。如果我只是捕获了StandardError,然后引发了一个自定义异常并在ApplicationController中处理它,这样可以吗?谢谢好的,如果你想在你的控制器中执行,你可以在你的控制器中使用
rescue\u from
。再次感谢。但是,如果我在控制器中捕获它,而不让它一直到达应用程序控制器,我认为异常通知gem不会知道抛出了异常。感谢您提供了非常详细的答案。如果我只是捕获了StandardError,然后引发了一个自定义异常并在ApplicationController中处理它,这样可以吗?谢谢好的,如果你想在你的控制器中执行,你可以在你的控制器中使用
rescue\u from
。再次感谢。但是,如果我在控制器中捕获它,而不让它一直到达应用程序控制器,我认为异常通知gem不会知道抛出了异常。