Rails 5.2多个数据库连接问题

问题描述 投票:1回答:1

我们发现了一些用于创建具有多个数据库连接的Rails应用程序的模式(例如:https://www.thegreatcodeadventure.com/managing-multiple-databases-in-a-single-rails-application/

我们使用的模式如下(实际示例):

# models/icm_db_base.rb
class IcmDbBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :icm_production
end

然后,对于要实现此连接的模型,我使用:

# models/icm_task.rb
class IcmTask < IcmDbBase
... model code here
end

虽然这全部加载完毕,但是当我尝试在Rails控制台中运行测试时,我们得到以下奇怪的信息(此行为在dev和prod上是可复制的:]

Loading development environment (Rails 5.2.3)
2.6.4 :001 > IcmTask.connection_config
=> DATABASE CONNECTION CONFIG FOR ActiveRecord::Base (DB #1)

2.6.4 :002 > IcmTask.superclass
 => IcmDbBase(abstract) 

2.6.4 :003 > IcmDbBase.connection_config
 => DATABASE CONNECTION CONFIG FOR IcmDbBase (DB #2)

很明显,此输出(虽然没有预期)实际上是发生了,并且IcmTask从ActiveRecord :: Base继承了它的连接,而不是根据期望/预期从IcmDbBase继承。

我们正在运行Rails 5.2.3和Ruby 2.6.4。

更奇怪的是,如果我将日志放入我们的Web服务器(puma 4.3.0),则IcmTask的连接配置会按预期与IcmDbBase匹配,并且一切都会按预期进行。

这里有什么明显的地方吗?无论我们在Rails控制台中尝试过什么,我们都无法像预期的那样继承该模型的连接。

ruby-on-rails ruby-on-rails-5
1个回答
0
投票

结果显示innkeeper gem是开箱即用的(仅通过安装就可以覆盖此连接继承行为),所以当我删除gem时,它的行为符合预期。

© www.soinside.com 2019 - 2024. All rights reserved.