Rails多个数据库连接超时,容错

时间:2015-02-06 11:54:47

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql rails-activerecord

我需要我的rails应用程序来连接多个数据库。在我的模型中做了一个功能来帮助我。

# return true if it change the connection, false  otherwise
def self.change_connection (database_name)
  ret = false
  begin
    self.connection_handler.clear_all_connections!()
    self.establish_connection :"#{database_name}"
    @@db_conf_name = database_name
    ret = true
  rescue
    self.connection_handler.clear_all_connections!() 
    self.establish_connection  :"#{@@db_conf_name}" unless @@db_conf_name.empty?
  end
  ret
end

如果所有数据库都已启动并运行,这项工作很棒,但当应用程序更改为不在线的数据库时,此方法不会出现任何异常,并且应用程序在与数据库的第一次交互中陷入困境,直到网络服务器超时(60秒)。

我尝试了这种改变,但它也不起作用:

Timeout::timeout(2){
  self.connection_handler.clear_all_connections!()
  self.establish_connection :"#{database_name}"
  #dummy query force to establish the connection
  connection.execute("SELECT 1 from broadcasts")
}

永远不会触发此超时。

有没有办法配置超时或检查数据库是否在线并在2或3秒内超时的方法?

0 个答案:

没有答案