在ActiveRecord中自动处理丢失的数据库连接?

时间:2009-10-27 22:33:54

标签: ruby-on-rails activerecord amazon-web-services

随着今天亚马逊Relational Database Service及其'强制'维护窗口的推出,我想知道是否有人在Rails中处理丢失的数据库连接有任何解决方案。

理想情况下,如果数据库连接消失(即亚马逊正在进行维护),我希望能够自动向访问者提供维护页面 - 有没有人做过这样的事情?

干杯 Arfon

1 个答案:

答案 0 :(得分:4)

您可以使用Rack Middleware执行此操作:

class RescueFromNoDB < Struct.new(:app)
  def call(env)
    app.call(env)
  rescue Mysql::Error => e
    if e.message =~ /Can't connect to/
      [500, {"Content-Type" => "text/plain"}, ["Can't get to the DB server right now."]]
    else
      raise
    end
  end
end

显然,您可以自定义错误消息,e.message =~ /Can't connect to/位可能只是偏执狂,几乎所有其他SQL错误都应该在ActionController::Dispatcher内捕获。