八达通宝石不与活跃的记录关系一起工作

时间:2017-04-02 08:40:10

标签: mysql ruby-on-rails ruby postgresql octopus

最近我们考虑过将奴隶数据库用于我们的搜索/读取操作。我们没有任何计划将所有读取请求发送给奴隶。我们只想将我们的搜索查询中的一小部分打到奴隶数据库

我尝试了几乎所有可用的宝石octopus, octoshark, db-charmer, makara, knockoff,但它们都没有正常工作。

For example on Octopus (other gems too),下面是一个大问题

Octopus.using(:slave1) do User.first end

这很好用,并使用“slave1”。

但不确定为什么以下不起作用。

Octopus.using(:slave1) do User.where(id: 1) end

这个没有使用slave1,但它在master数据库上触发,我们的大多数搜索查询都采用这种格式。

直到现在,这令人非常沮丧。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

也许尝试直接在User模型中建立数据库连接?

class User < ActiveRecord::Base  
  octopus_establish_connection(db_url_to_slave)
  ..
 end

我们目前正在制作Octopus,我相当确定where用例适用于我们:P

如果您需要更多信息,此section in the docs会详细说明该方法。

答案 1 :(得分:0)

经过多次努力,我发现User.where(id: 1)只创建了一个活动的记录关系,但查询在octopus之外执行。所以,当我User.where(id: 1).to_a时,神奇的一切都开始为我做好了。

我尝试过多次使用这个技巧。我花了很多时间才弄明白。