我正在使用Octopus gem在Rails中进行DB分片。
如何获取特定于分片的数据库连接。例如,我在shards.yml中指定了一个名为“new_db”的分片。如何获取数据库连接?原始连接。我知道如何更新/插入此分片,我只需要连接。
我尝试了以下但无济于事。它只是给了我在database.yml中指定的默认连接。
Octopus.using("new_db") do
connection = ActiveRecord::Base.connection
end
答案 0 :(得分:1)
如果您有此行为:
ActiveRecord::Base.connection.class
#=> ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
这意味着您的连接不是通过八达通建立的。
你应该:
ActiveRecord::Base.connection.class
#=> Octopus::Proxy
而不是......
正如 momoshu 指出in this GitHub issue,它可能是由您的应用使用
引起的 ActiveRecord::Base.establish_connection
我相信如果你致电
establish_connection
,八达通会停止 代理连接,无论shards.yml
中的配置如何Octopus.enabled?
。
其他线索
我无法使其工作,因为gem位于我的gemfile的顶部,奇怪的是,将gem 'ar-octopus'
移动到gemfile的底部使其工作。