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



有人能解释一下这两个函数到底做了什么吗?我无法通过rails-api理解它。

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

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

首先,我想你想要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的其他子级不同的连接池;因此,当您切换回ActiveRecord::Base连接时,它不会切换所有型号,只切换共享主连接池的型号。

这是ConnectionHandler文档:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionHandler.html

最新更新