有没有办法在Rails中以编程方式更改数据库源?

时间:2011-02-25 14:13:05

标签: ruby-on-rails

我需要使用两个数据库,远程盒子上有一个oracle,本地盒子上有一个mysql。 oracle DB只有一些我需要使用的数据,所以我设置我的模型默认使用mysql数据库,以及我需要使用oracle的几个模型,我做了:

     establish_connection "oracle_database"

哪个工作得很好。

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

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

3 个答案:

答案 0 :(得分:1)

您可以在建立与远程服务器的连接时使用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

答案 1 :(得分:0)

我认为你应该看看https://github.com/mixonic/ShardTheLove

答案 2 :(得分:0)

这不像我想的那么强大,但是现在我发现我可以使用配置变量来解决这个问题:

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

然后我可以将config var设置为“true”或“false”我的配置文件。我会根据数据库是否可用自动更改,但现在这对我有用...