Ruby on rails 有没有一种方法可以通过编程更改Rails中的数据库源?

Ruby on rails 有没有一种方法可以通过编程更改Rails中的数据库源?,ruby-on-rails,Ruby On Rails,我需要使用两个数据库,一个oracle在远程设备上,一个mysql在本地设备上。oracle DB只有一些我需要使用的数据,因此我将模型设置为默认使用mysql数据库,而我需要使用oracle的几个模型,我做到了: establish_connection "oracle_database" 效果很好 不幸的是,我刚刚被告知,我不能依赖远程oracle数据库。我的新要求是,我的系统需要能够使用oracle数据库(如果可用),或者,如果不可用,则需要使用具有相同类型的表/列/等的本地数

我需要使用两个数据库,一个oracle在远程设备上,一个mysql在本地设备上。oracle DB只有一些我需要使用的数据,因此我将模型设置为默认使用mysql数据库,而我需要使用oracle的几个模型,我做到了:

     establish_connection "oracle_database"
效果很好

不幸的是,我刚刚被告知,我不能依赖远程oracle数据库。我的新要求是,我的系统需要能够使用oracle数据库(如果可用),或者,如果不可用,则需要使用具有相同类型的表/列/等的本地数据库


这似乎是Rails实际上不支持的东西?手动编辑database.yml文件以将“oracle_database”更改为有时指向远程数据库,有时指向本地数据库,我想你应该看看

我想你应该看看

这并不像我希望的那么健壮,但现在我发现我可以用配置变量解决问题:

 if APP_CONFIG["use_remote"]
      establish_connection "oracle_database"
 else
      establish_connection "local_database" 
 end

然后我可以在我的配置文件中将配置变量设置为“true”或“false”。我宁愿它根据数据库是否可用而自动更改,但目前这对我来说是可行的…

这并不像我所希望的那样可靠,但现在我发现我可以使用配置变量来解决这一问题:

 if APP_CONFIG["use_remote"]
      establish_connection "oracle_database"
 else
      establish_connection "local_database" 
 end

然后我可以在我的配置文件中将配置变量设置为“true”或“false”。我希望它能根据数据库是否可用而自动更改,但目前这对我来说是可行的…

在建立与远程服务器的连接时,您可以使用begin rescue捕捉异常,如下所示

begin
  establish_connection "oracle_database"
rescue Exception => e
  logger.warn "Connecting to local database due to exception #{e.to_s}"
  establish_connection "local_database"
end

您可以使用begin rescue在建立到远程服务器的连接时捕获异常,如下所示

begin
  establish_connection "oracle_database"
rescue Exception => e
  logger.warn "Connecting to local database due to exception #{e.to_s}"
  establish_connection "local_database"
end

我不完全确定。。。在我的代码中,我不知道我想要的是远程数据库还是本地数据库……只是有时候不会有远程数据库,我也不希望我的rails应用程序爆炸。。。我不确定碎片是否能很好地处理这个问题(我仍然必须明确地说“我想使用数据库X”,看起来是…),我不完全确定。。。在我的代码中,我不知道我想要的是远程数据库还是本地数据库……只是有时候不会有远程数据库,我也不希望我的rails应用程序爆炸。。。我不确定碎片是否能很好地处理这个问题(我仍然必须明确地说“我想使用数据库X”,看起来像…),除了…当然…当它找不到另一个数据库时,我得到的异常是超时,超时时间太长,不可行(我想回到我的if语句)。但是,这在技术上仍然符合我的期望,所以谢谢!除了……当然……当它找不到另一个数据库时,我得到的异常是超时,超时时间太长,不可行(我想回到if语句)。但是,这在技术上仍然符合我的期望,所以谢谢!