ActiveRecord什么时候建立连接?

2024-04-12

在我的一些 Rails 应用程序中,我的 ActiveRecord 模型似乎在初始化时建立数据库连接(例如,当我这样做时rails console),而在其他情况下,连接似乎仅在我引用模型类或实例化模型对象时才建立。

例如,我刚刚转到一个应用程序,打开 Rails 控制台并写道:

SomeModel.connected?

它回来了false。我转到另一个应用程序,输入相同的命令(针对不同的模型),然后它返回true。我转到第三个应用程序并输入相同的命令。这次,它等了一会儿,又回来了true,这让我想到connected?方法由于某种原因触发了连接。

这种行为差异似乎与 Rails 版本或模型内容无关。我在初始化程序中所做的事情可能很奇怪,但我不这么认为。

那么Rails什么时候建立连接呢?或者预期的行为是什么?

附加信息

我补充一下,看起来不像connected?返回 false 因为 Railscannot连接到数据库。

例如,在我的第一个应用程序中,我这样做:

SomeModel.connected?
# => false
SomeModel.table_exists? # or any other command that makes Rails look at db
# => true
SomeModel.connected?
# => true

回答我自己的问题:

Rails 初始化过程中是否真正初始化了数据库连接基本上取决于是否ActiveRecord::Base.connection (not establish_connection) 在初始化过程中被调用。

这可能与 Rails 版本有关:例如,在 Rails 3.2.13 中,“active_record.validate_explain_support”初始化程序调用connection:

!ActiveRecord::Base.connection.supports_explain?

在 Rails 3.2.14 中,不会进行此调用。

然而,Rails 3.2.14 可能会调用connection在“active_record.set_reloader_hooks”初始化程序中。此调用可能与命令一起发生

ActiveRecord::Base.clear_cache!

虽然prepare回调跑步者似乎并不总是这样称呼......

我还发现了一些宝石(例如,ActiveAdmin)有一个初始化过程将调用connection在某一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveRecord什么时候建立连接? 的相关文章

随机推荐