【发布时间】:2009-08-30 09:37:34
【问题描述】:
如果 Rails 应用程序出现异常,则会收到一个错误页面,其中包含调用堆栈、请求参数和代码摘录。
- 如果请求是 XHR 请求,是否可以创建不同的输出?
- 一般情况下是否可以重新定义异常输出? (我认为这会自动回答第一个问题)
【问题讨论】:
标签: ruby-on-rails ajax exception-handling
如果 Rails 应用程序出现异常,则会收到一个错误页面,其中包含调用堆栈、请求参数和代码摘录。
【问题讨论】:
标签: ruby-on-rails ajax exception-handling
您可以尝试在您的动作控制器中覆盖rescue_action。
def rescue_action(exception)
if request.xhr?
custom_xhr_error_handling_for(exception)
else
super
end
end
更传统的方法是使用rescue_from Exception, :custom_xhr_error_handling_for,但如果后来发现它不是 xhr 响应,您就无法让默认代码做脏活。
【讨论】:
在开发模式下您只能看到带有回溯的页面,而在生产模式下您会看到一个标准错误页面(位于 public/500.html 中),它只是说发生了错误。
这是出于安全原因,当然不限于 Rails:所有 Web 应用程序框架都这样做,因为回溯可能会泄露敏感信息(有时您会在 Web 应用程序上看到错误消息显示数据库连接字符串或密码等;好吧,您不希望这种情况发生)。
在开发模式下,在 XHR 调用中,您仍然会收到回溯(我使用 firebug 来调试我的应用程序,所以我只是将其复制并粘贴到某处)。
在生产模式下,您可以在 ajax 调用中处理 XHR 错误,方法是通过设置函数的 :failure 参数(如 remote_function)显式设置要在错误时执行的函数。
【讨论】: