Ruby on rails 如何在rescue_中呈现500页

Ruby on rails 如何在rescue_中呈现500页,ruby-on-rails,Ruby On Rails,我想在我的应用程序出现异常时发送电子邮件,并呈现常规的500页。我找不到如何执行500页的渲染: class ApplicationController < ActionController::Base rescue_from StandardError do send_email_of_error # what goes here? end ... end class ApplicationControllershared/500.html,:状态=

我想在我的应用程序出现异常时发送电子邮件,并呈现常规的500页。我找不到如何执行500页的渲染:

class ApplicationController < ActionController::Base
  rescue_from StandardError do
     send_email_of_error
     # what goes here? 
  end

  ...
end
class ApplicationController
再次引发异常可能会满足您的要求:

rescue_from StandardError do |exception|
  send_email_of_error
  raise exception
end
您也可以调用
render
来呈现您自己的页面,这里有一个这样做的示例


但是为什么要重新发明轮子呢?该方法已经做到了这一点,并且可以定制和测试。

这是一种可能适合您需要的方法:

class ApplicationController < ActionController::Base
  rescue_from Exception, :with => :render_500

  def render_500(exception)
    @exception = exception
    render :template => "shared/500.html", :status => 500
  end
end
class ApplicationController:render\u 500
def render_500(例外)
@异常=异常
呈现:模板=>shared/500.html,:状态=>500
结束
结束

太好了。我发现原版已经两年没有更新了。我将尝试此版本。不幸的是,结果显示错误页,但状态代码为200。永远不应该从异常中拯救。使用StandardError代替Andrew Marshall的答案。@dmur如果您解释您的评论,对其他人会有帮助。问题是如何呈现500页。安德鲁·马歇尔的回答根本没有提到这一点。无论您是从异常中解救还是从标准错误中解救—我永远不会做的事情,因为您对错误一无所知,所以让它崩溃并修复它—在这里并不重要。在我的回答中,我应该写“任何例外”你是对的,这里有一个解释: