gpt4 book ai didi

ruby-on-rails - ActiveRecord 什么时候建立连接?

转载 作者:行者123 更新时间:2023-12-04 07:40:04 25 4
gpt4 key购买 nike

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

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

SomeModel.connected?

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

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

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

附加信息

我要补充一点,它看起来不像 connected?返回 false 因为 Rails 不能 连接到数据库。

例如,在我的第一个应用程序中,我这样做:
SomeModel.connected?
# => false
SomeModel.table_exists? # or any other command that makes Rails look at db
# => true
SomeModel.connected?
# => true

最佳答案

回答我自己的问题:

Rails 初始化过程中是否真正初始化了数据库连接,主要取决于ActiveRecord::Base.connection (不是 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回调运行程序似乎并不总是这样称呼...

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

关于ruby-on-rails - ActiveRecord 什么时候建立连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com