我已经阅读了有关此主题的许多现有问题/线程,但请记住 没有任何 他们中有直接解决了我的问题。还要记住这是 不是 我不知道数据库的情况。

也就是说,我需要一个解决方案 动态 连接到Rails应用程序中的多个数据库。我的情况是我有多个数据记录网站,所有这些网站都具有简单的数据表(事件,时间戳,值)。这些站点需要(并将)保留,因为它们是由于需要使用它们的本地应用程序所致。

我需要的是创建一个维护“ MySQL_Logins”表的应用程序,并使用每个登录名来连接到各种数据库中的任何一个,并为其数据提供图表/图。

对于我连接的所有MySQL数据库,我的“数据”模型将保持不变,我只需要告诉我的模型即时连接到其他DB即可。我希望这很简单,但是我们会看到。

有帮助吗?

解决方案

你要 Activerecord ::基础#starmet_connection. 。您可能需要在抽象子类中使用它,以便使用手册连接的模型不会干扰其余应用程序的连接使用:

class LogBase < ActiveRecord::Base
  self.abstract_class = true
end

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

如果您只有一个建立手动连接的模型,则不需要抽象类。

您知道可能连接到的完整数据库吗?如果是这样,Database.yml可能仍然对您有用。您可以将所有信息作为目录放入其中,为每个数据库提供一个名称,然后动态选择使用这些名称在应用程序中与之建立的一个名称:

# database.yml
atlanta:
  host: atlantadb.foo.com

# foo.rb
LogItem.establish_connection :atlanta

建立连接可能是非常重量的,因此,如果站点通过广域网络分开。我会考虑使用提取转换载荷方法并使用每小时/每日的CRON作业将数据复制到集中的报告网站是否更有意义。这是数据仓库的最基本形式,是一种非常常用的方法。如果您正在使用mysql, Maatkit Sync 是一个整洁的小工具,例如桌子的rsync。或者,您可能会使用支持主奴隶复制的数据库,尽管它可以更加复杂地维护。

其他提示

Rails还不支持开箱即用的多个数据库(可能永远不会,谁知道)。您必须以某种方式劫持ActivereCord中该模型的数据库连接。

这里 是为此的主动记录文档,这是 具体文档 您必须覆盖。

这个 确实可以很好地解释过程。

也有 一些 半生产准备 项目 攻击这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top