【发布时间】:2019-10-14 14:37:26
【问题描述】:
我构建了一个错误处理程序,当生产中的任何控制器方法出现错误时,它会将用户重新路由到错误页面并向我(开发人员)发送一封通知电子邮件。这可行,但我希望在开发时出现正常的错误屏幕。我认为生成此代码的代码只是 raise e,但在开发中,我现在得到了默认的 production 错误页面(上面写着“我们很抱歉,但出了点问题” .),而不是过去出现的详细错误消息和跟踪。
class ApplicationController < ActionController::Base
rescue_from StandardError, with: :handle_error
#error handler
def handle_error(e)
if Rails.env.production?
#code to send email and redirect to error page
else
raise e
end
end
end
我还尝试了以下方法:
raise
raise StandardError.new e
raise e, e.message
raise e.message
如果我在 binding.pry 控制台中运行其中任何一个,它们会产生我正在寻找的错误消息,但错误页面仍然只是说“我们很抱歉,但出了点问题。”
有谁知道我怎样才能显示默认的开发错误页面?
更新
这太疯狂了……所以显示错误的代码通常应该可以正常工作,但是某处阻止了这种情况。如果我在生产中更改config.consider_all_requests_local = true,错误会出现在生产中,但是即使我将我的 config/environments/production.rb 文件复制并粘贴到我的 config/environments/development.rb 中,错误仍然不会显示在发展上。如果我进入一个 pry 控制台,request.local? 返回“0”,表示 true,Rails.env 返回“development”。我不知道发生了什么。
更新 2
显然我不应该在开发中拯救异常,但即使我删除了所有自定义错误处理代码,所以我的应用程序控制器只是空的,我的错误仍然不会在开发中显示。此外,我有一个不同的应用程序,它具有完全相同的错误处理代码,因此错误确实会显示出来。
【问题讨论】:
-
我刚刚将您的代码粘贴到此处的一个随机应用程序上,它按预期工作!也许您的代码上还有其他问题?一些
application.rb或development.rb配置?在撬动时,Rails.env返回正确的环境?您使用的是哪个 Rails 版本? -
@LeonardoPrado 嗯,这很奇怪,但你是对的!我删除了所有自定义错误处理代码,但错误页面仍然没有详细信息。我正在使用 Rails 6.0.0.rc1 并且 Rails.env 确实返回“开发”...
-
@JoeMorano 你明白了吗?我陷入了完全相同的境地。我在开发模式下运行,
consider_all_requests_local设置为 true,但我仍然无法在浏览器中获得完整的错误。即使在视图中Rails.application.config.consider_all_requests_local返回 true 而request.local?返回 true。 -
几个小时后,我意识到我从 5.2 跳到了 6.1,而没有先升级到 6.0。这似乎导致了这个问题。我回滚,升级到 6.0,然后升级到 6.1,问题得到解决。可能缺少一些新的应用默认设置并导致此问题。
标签: ruby-on-rails ruby error-handling raise