【发布时间】:2011-09-12 15:54:47
【问题描述】:
我正在尝试将 ActiveRecord gem 升级到最新的 3.1.0 版本并看到很多异常出现,我认为这是由于我们处理多个数据库的方式。
对于我们的每个数据库,我们指定一个单独的基类,它继承自ActiveRecord::Base,并在其中调用establish_connection。没有跨数据库关系。到目前为止,这对我们来说效果很好。
升级到 ActiveRecord 3.1.0 我看到它在遍历关系时失败并出现ActiveRecord::ConnectionNotEstablished 异常(即,它将成功从数据库中提取单个实体或一组实体,但导航到相关类)。
回溯的第一行是C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in 'retrieve_connection',所以我对此进行了一些研究。方法定义如下:
def retrieve_connection(klass) #:nodoc:
pool = retrieve_connection_pool(klass)
(pool && pool.connection) or raise ConnectionNotEstablished
end
我的简单测试 (puts Customer.first.address) 调用了 retrieve_connection 3 次。两次使用Customer 作为klass 参数,一次使用ActiveRecord::Base 作为参数 - 这是因为establish_connection 没有为ActiveRecord::Base 调用而失败。
实际问题 那么 - 是否有一种新的推荐方法可以在 ActiveRecord 中处理多个数据库连接?如果有,是什么?
如果不是,是什么导致了这个问题?
【问题讨论】:
标签: ruby activerecord