Mat*_*iSG 0 ruby-on-rails ruby-on-rails-3
我知道,如果我的主应用程序中引发异常,我可以使用exceptions_app配置属性来提供动态错误页面。
但是,如果此错误页面是动态的,则它也可能会失败。就我而言,我与主应用程序共享一些显示逻辑,而该逻辑恰好是异常的来源,并且渲染错误页面再次引发了该异常。然后我的最终用户看到了乘客错误页面,该页面全是紫色的,奇怪而可怕。
如何可靠地向用户显示自定义错误页面(可能带有静态页面回退)?
实际上有一系列的配置开关和重定向可能性,具体取决于您的堆栈。
\n\n这是显示所有可能性的决策流程图。如果您有一个动态错误页面,您实际上还应该在 中添加它的静态呈现public/500.html,并将其符号链接到某个其他文件并在您的 Web 服务器中引用该文件(在图中, Apache\xe2\x80\x99s ErrorDocument)。
你不能简单地public/<HTTP status code>.html直接服务。事实上,Web 服务器会将/<HTTP status code>请求视为对静态页面的请求,并且我们的错误控制器将不再触发 Rails 路由,从而抢占动态错误显示。
您应该设置config.action_dispatch.show_exceptions为false(更多详细信息),并禁用您的应用程序运行程序(图中的 Passenger)错误页面,否则您将泄漏异常内容。
如果您想达到这一级别的详细程度,那么在用户隐藏的、自愿损坏的页面上添加集成测试非常重要,因为您将禁用一些调试和故障安全功能。
\n\n您可能还对以下参考文献感兴趣:
\n\nCustomErrorsHandler是一个自动尝试使用<HTTP status code>.erb模板并回退到静态public/<HTTP status code>.html页面的 gem。