我需要我的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秒内超时的方法?