[英]Rails 5.2 multiple database connections issue
我们发现了一些用于创建具有多个数据库连接的 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
然后,对于我要实现此连接的 model,我使用:
# models/icm_task.rb
class IcmTask < IcmDbBase
... model code here
end
虽然这确实加载了所有内容,但当我尝试在 Rails 控制台中运行测试时,我们会遇到以下奇怪情况(此行为可在开发和生产环境中复制):
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)
很明显,这个 output(虽然不是预期的)实际上已经发生了,并且 IcmTask 从 ActiveRecord::Base 继承了它的连接,而不是像期望/预期的那样从 IcmDbBase 继承。
我们正在运行 Rails 5.2.3 和 Ruby 2.6.4。
更奇怪的是,如果我将日志放入我们的 web 服务器(puma 4.3.0),IcmTask 的连接配置确实与预期的 IcmDbBase 匹配,并且一切都按预期工作。
这里有什么明显的吗? 无论我们在 Rails 控制台内尝试了什么,我们都无法让它继承 model 的预期连接。
原来 innkeeper gem 开箱即用地覆盖了此连接继承行为(只需安装它),因此当我删除 gem 时,它的行为符合预期。
尝试
IcmTask.connection_db_config
代替
IcmTask.connection_config
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.