1

我正在使用 Octopus gem 在 Rails 中进行 DB 分片。

如何获取特定于分片的数据库连接。例如,我在 shards.yml 中指定了一个名为“new_db”的分片。我如何获得它的数据库连接?原始连接。我知道如何更新/插入这个分片,我只需要连接。

我尝试了以下但无济于事。它只是给了我在 database.yml 中指定的默认连接。

Octopus.using("new_db") do 
    connection = ActiveRecord::Base.connection

end
4

1 回答 1

2

如果你有这种行为:

ActiveRecord::Base.connection.class
#=> ActiveRecord::ConnectionAdapters::PostgreSQLAdapter

这意味着您的连接不是通过八达通建立的。

你应该有:

ActiveRecord::Base.connection.class
#=> Octopus::Proxy

反而...


正如momoshu在此 GitHub 问题中指出的那样,这可能是由于您的应用使用

 ActiveRecord::Base.establish_connection  

我相信,如果您拨打电话establish_connection,八达通将停止代理连接,而不管shards.yml或 中的配置如何Octopus.enabled?


其他铅

我无法让它工作,因为 gem 位于我的 gemfile 的顶部,奇怪的是,移动gem 'ar-octopus'到 gemfile 的底部使它工作。

于 2017-04-11T14:49:03.517 回答