有些机构可以解释一下这两个函数到底做了什么,我无法通过rails api理解它。
ActiveRecord::Connection.clear_active_connections!
ActiveRecord::Connection.clear_all_connections!()
我正在开发一个应用程序,我必须在其中建立动态数据库连接。 我是否需要在建立新连接之前放置这些行。 当我建立一个新连接时,旧连接会发生什么,因为我没有明确删除它,这是否会自动发生?
答案 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