活动记录重置数据库连接问题 - ActiveRecord :: Connection.clear_active_connections

时间:2013-12-11 07:51:35

标签: ruby-on-rails activerecord

有些机构可以解释一下这两个函数到底做了什么,我无法通过rails api理解它。

  ActiveRecord::Connection.clear_active_connections!
  ActiveRecord::Connection.clear_all_connections!()

我正在开发一个应用程序,我必须在其中建立动态数据库连接。 我是否需要在建立新连接之前放置这些行。 当我建立一个新连接时,旧连接会发生什么,因为我没有明确删除它,这是否会自动发生?

1 个答案:

答案 0 :(得分:4)

首先,我想你想要ActiveRecord::Base.connection

我现在正在看这些问题。我可以告诉ActiveRecord::Base.establish_connection将从池中删除所有先前的连接,并仅使用新连接。

当我在ActiveRecord::Base级别和单个模型级别(即User.establish_connection)来回交换时,我遇到了问题。在某些情况下,我发现如果我在模型上建立连接,然后在ActiveRecord::Base上建立连接(打算也使用模型上的新连接),模型将保留连接。

即便:

$ ActiveRecord::Base.connection_config[:host]
-> main
$ User.connection_config[:host]
-> main

$ User.establish_connection :blah
$ User.connection_config[:host]
-> blah
$ ActiveRecord::Base.connection_config[:host]
-> main

$ ActiveRecord::Base.establish_connection :blah
$ User.connection_config[:host]
-> blah
$ ActiveRecord::Base.connection_config[:host]
-> blah

$ ActiveRecord::Base.establish_connection :main
$ User.connection_config[:host]
-> blah
$ ActiveRecord::Base.connection_config[:host]
-> main

这里要注意的重点是,由于您已明确地在User模型上建立了连接,ActiveRecord知道使用与用于ActiveRecord::Base的其他子项的连接池不同的连接池。 {1}};因此,当您切换回ActiveRecord::Base连接时,它不会切换所有模型,只会切换共享主连接池的模型。

以下是ConnectionHandler doc:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionHandler.html