Rails开发环境未显示错误追踪栈问题求助
针对你遇到的问题——设置config.consider_all_requests_local = true后仍无法看到完整错误栈,且请求进入ShowExceptions而非DebugExceptions的处理逻辑,以下是几个可能遗漏的排查方向:
检查中间件顺序与存在性
Rails开发环境默认会优先加载ActionDispatch::DebugExceptions中间件处理错误,而ActionDispatch::ShowExceptions是生产环境的默认处理逻辑。如果中间件顺序被自定义修改(比如在config/application.rb或初始化文件中调整),或者DebugExceptions被意外移除,会导致ShowExceptions接管错误处理。
执行命令rails middleware查看中间件列表,确认ActionDispatch::DebugExceptions存在且位于ActionDispatch::ShowExceptions之前。排查第三方gem或自定义中间件干扰
部分异常监控、错误捕获类的gem,或者项目自定义的错误处理中间件,可能会强制启用ShowExceptions逻辑,或修改consider_all_requests_local的实际生效值。可以临时移除这类gem,重启服务器后测试是否恢复正常错误栈展示。确认
config.action_dispatch.show_exceptions的配置
开发环境中config.action_dispatch.show_exceptions默认应为false,如果被意外设为true,会强制触发ShowExceptions的处理流程。在控制台执行Rails.application.config.action_dispatch.show_exceptions确认值,若为true,检查是否有初始化代码或配置文件修改了这一设置。检查全局异常捕获逻辑
如果项目在ApplicationController或其他控制器中使用了rescue_from全局捕获异常,自定义的处理逻辑可能覆盖了Rails默认的错误栈展示。比如直接返回自定义错误页面而未调用super传递异常给默认处理流程,需要查看相关rescue_from代码是否存在这类拦截行为。验证服务器启动环境
确保启动服务器时确实使用的是开发环境,避免因RAILS_ENV环境变量被意外设置为production或其他环境,导致开发环境配置不生效。可以通过控制台执行Rails.env确认当前环境,或启动服务器时添加--environment development参数明确指定环境。
内容的提问来源于stack exchange,提问作者Sig

