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什么时候建立连接? 的相关文章

  • Rails 3.2.9 和子文件夹中的模型

    从 Rails 3 2 9 开始 我无法将模型存储在子文件夹中 在我的应用程序中 我有这棵树 models type models assets user concerns 另外在 application rb 中有 config auto
  • 在 Rails 应用程序中查找未使用的图像?

    我熟悉类似的工具自重 http github com aanand deadweight用于查找 Rails 应用程序中未使用的 CSS 但图像是否存在任何内容 我正在参与一个项目 其中包含与各种设计师合作的大量资产目录 并且我正在努力减少
  • 使用活动存储时堆栈级别太深 has_one_attached :picture

    我正在尝试为 Ruby on Rails API 项目实现 Active Storage 我根据文档放置了 has one attached picture 并成功将图片上传到AWS S3服务上 现在 当我尝试访问志愿者数据时 它说 Act
  • 如何在 rake 任务中强制使用 RAILS_ENV?

    我有这个小耙子任务 namespace db do namespace test do task reset do ENV RAILS ENV test Rake Task db drop invoke Rake Task db creat
  • ActiveRecord 将字符串解析为日期时间?

    如果我通过了String into Datetime创建新的 AR 对象时 它会自动解析列 1 9 2p290 011 gt Movie new release date gt 21 Nov 1990 gt
  • Ruby Net:SSH控制大师?

    我目前有一个 Ruby Rails 应用程序 需要建立大量的短 SSH 连接 使用 Ruby Net SSH 库可以正常工作 只是每次我想发出命令时应用程序都必须登录并协商密钥 这太慢了 有没有办法使用 Ruby Net SSH 启用 Co
  • Rails 删除方法不起作用

    好吧 我在 Ruby on Rails 中的删除方法上遇到了这样的问题 我想 我尝试了我读过的所有内容 但它不起作用 也许你可以帮助解决这个问题 当我单击链接时 它会重定向到患者 1 confirm Are you sure 3F meth
  • Rails 3.1 资产 - 开发中的奇怪服务

    我遇到了 Rails 3 1 资产管道的问题 资产在开发过程中包含两次
  • Rails 4 ExecJS::Listings#index 中的程序错误

    将 JavaScript 添加到我的网络应用程序后 我现在收到以下错误 ExecJS ProgramError in Listings index stdin 16 5 error unexpected else else in Users
  • Rails minitest,数据库清理器如何将 use_transactional_fixtures = false

    我想在 ministest 中禁用 use transactional fixtures false 以捕获 after commit 回调 我应该设置什么以及在哪里设置 你有几个选择 一种是创建一个没有事务固定装置的测试 并希望对测试数据
  • 如何在 Haml 中编写 if 条件?

    怎么写if and if elseRuby on Rails 应用程序的 Haml 语句 HAML 是基于缩进的 解析器可能很棘手 在 Haml 中不需要使用 end 请改用缩进 在 Haml 中 只要在 Ruby 计算命令之后增加缩进 就
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 从 ActiveRecord 获取表名

    I used ActiveRecord Base set table name在动态创建的 ActiveRecord 类上设置我的表名称 现在我需要知道稍后如何获得该值 api 文档没有提及如何执行此操作 另外 我无法从 ActiveRec
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • Partial、Layout、Template 渲染问题

    情况 因此 当我访问页面时 我希望能够将布局应用到部分 我想要三个具有相同布局的部分 现在 我正在尝试使用以下命令来执行此操作 where shared services essay是这样的 p blah p div blah div
  • Rails f.check_box 设置选中/未选中值

    所以我在 Rails 中得到了一个带有复选框的表单助手 我希望该复选框在选中或取消选中时具有 thatvalue 或 thisvalue 值 我还没有找到如何设置它的地方 f check box field 我发现了类似的东西 但它不起作用
  • 如何在 Rails 6 中禁用 TurboLinks?

    所以我面临这个问题 我的服务器实际上从客户端的请求中检索了正确的数据 并将这些数据发送到浏览器 我可以清楚地看到它可用于浏览器 CTRL SHIFT C gt Network gt my request 但是 浏览器不会刷新 所以我现在看到
  • 如何跳过 Devise SessionsController 的 before_filter ?

    我有一个before filter in my ApplicationController 也就是说 对于我的项目中的每个控制器 我怎么能够skip before filter对于设计的SessionsController创造行动 这是我的
  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • 通过使用 Minitest 的 Rails,如何设置 RuboCop 在每次使用 rake 运行测试时自动运行?

    当我运行以下命令时 我想要RuboCop https github com bbatsov rubocop在测试运行之前检查我指定的应用程序目录 bundle exec rake test 我添加了以下任务lib tasks test ra

随机推荐