Rails如何捕获数据库连接不可用的异常

时间:2014-09-09 13:09:10

标签: ruby-on-rails ruby exception-handling

我有一个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中捕获这样的异常?感谢

1 个答案:

答案 0 :(得分:0)

Ruby中的标准做法是使应用程序级异常继承自StandardError而不是Exception。这样就可以解救它们不会导致隐藏重要的系统级问题。您可以在Rails here中看到示例。这就是你的积木无法正常工作的原因。

Exception替换为StandardError,或者甚至更好,使用调试器暂停其中一行,并在数据库不可用时逐步执行代码。您应该在某种救援模块中找到自己,并且能够看到引发的实际错误的类,以便您可以使用它。如果需要,您还可以浏览活动记录源代码以找到正确的类名;)