ruby-on-rails - ruby - 同一模型的 ActiveRecord 多个数据库

标签 ruby-on-rails ruby sql-server activerecord multiple-databases

我们有一个供应商提供的应用程序,它使用 MSSQL 数据库作为后端。 我们有此应用程序的多个实例,因此有多个数据库/数据库服务器托管相同的数据库模型但具有不同的数据。

我正在尝试开发一个非常简单的“浏览工具”来提供所有这些数据库的单一 View (只读)。

我正在使用 Sinatra/ActiveRecord/ActiveRecord-SqlServer-Adapter 并且我的模型已过载以符合数据库模型。

我现在正在寻找的是一种同时请求所有数据库并汇总所有结果的方法。

有什么方法可以在 vanilla ActiveRecord 中做到这一点吗?使用 gem ? 我发现 db-charmer gem 可以做类似的事情,但它只与 MySQL 兼容,而且我无法在没有 rails 的情况下让它工作。

有什么想法吗?

最佳答案

我终于找到了一个 gem,我可以破解它来做我需要的事情。

我用了Octopus及其分片功能,我向我的 Controller 基类(我的所有其他 Controller 都基于该类)添加了一个简单的方法,如下所示:


def on_all_shards(&block)
  Octopus.config[:shards].each.collect do |shard, shard_config|
    Octopus.using(shard) do
      yield
    end
  end
end

然后在我的 Controller 中,只要我需要聚合所有分片的结果,就可以这样做:


on_all_shards do
  Model.first
end

在这种情况下,我将从每个数据库(1 个记录/数据库)中获取此模型/表的第一条记录的数组。

谢谢你们给我指明了正确的方向(ActiveRecord 连接/connection_pool 管理)!

关于ruby-on-rails - ruby - 同一模型的 ActiveRecord 多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230944/

相关文章:

ruby-on-rails - Rails : An unhandled lowlevel error occurred. 应用程序日志可能有详细信息

ruby-on-rails - Ruby on Rails 3 - 使用 View 和 Controller 创建插件或引擎?

sql-server - T-SQL : Update column only if value is provided

html - rails -nokogiri GEM : Detect MIME type of image in URL

ruby-on-rails - 如何将网站上的所有页面转换为 pdf 格式?

ruby-on-rails - 你如何撤消回滚(前滚?)

ruby - 为什么触发器运算符包含第二个条件?

sql-server - 删除查询在 SQL Server 中不起作用

sql - 如何在 SQL 中获取最大子集的最大记录

ruby-on-rails - 在正在运行的应用程序中将模型动态连接到数据库?