我有一个Rails应用程序,当我的数据库服务器在我的共享主机上关闭时,我正试图捕获异常,以便我可以理解我的服务器的性能。为此,我从https://github.com/smartinez87/exception_notification设置了exception_notification gem,在我的ApplicationController中,我有以下代码:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :check_database
rescue_from Exception do |exception|
ExceptionNotifier::Notifier \
.exception_notification(request.env, exception) \
.deliver
raise exception
end
private
def check_database
Category.first
rescue Exception => exception
ExceptionNotifier::Notifier \
.exception_notification(request.env, exception) \
.deliver
raise exception
end
end
但是,没有一个救援块能为我工作。你能否告诉我如何在Rails中捕获这样的异常?感谢
答案 0 :(得分:0)
Ruby中的标准做法是使应用程序级异常继承自StandardError
而不是Exception
。这样就可以解救它们不会导致隐藏重要的系统级问题。您可以在Rails here中看到示例。这就是你的积木无法正常工作的原因。
将Exception
替换为StandardError
,或者甚至更好,使用调试器暂停其中一行,并在数据库不可用时逐步执行代码。您应该在某种救援模块中找到自己,并且能够看到引发的实际错误的类,以便您可以使用它。如果需要,您还可以浏览活动记录源代码以找到正确的类名;)