我们有一个供应商提供的应用程序,它使用 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/