Rails 4 中的 autoload_paths 与 eager_load_paths 令人困惑

2024-04-10

我读了一篇关于 Rails load_paths 的文章,这里是link http://hakunin.com/rails3-load-paths.

但是,我仍然对两者之间的区别感到困惑autoload_paths and eager_load_paths:

我已经在新创建的 Rails 4 项目中测试了它们。看起来它们的运行方式相同,即在开发模式下自动重新加载,但在生产模式下自动重新加载。


链接文章的作者在这里。这是试图消除困惑,摆脱@fkreusch的答案。

在 Ruby 中你必须要求每一个.rb文件以便运行其代码。但是,请注意,在 Rails 中,您从不特别需要任何模型、控制器或其他文件app/目录。这是为什么?那是因为在 Rails 中app/* is in autoload_paths。这意味着当您在开发中运行 Rails 应用程序时(例如通过rails console) — ruby​​ 实际上还不需要任何模型和控制器。 Rails 使用 ruby​​ 的特殊神奇功能来实际等待,直到代码提到一个常量,例如Book,然后它才会运行require 'book'它发现在其中之一autoload_paths。这可以让您在开发过程中更快地启动控制台和服务器,因为只有在代码实际需要时,启动时才不需要任何东西。

现在,这种行为有利于本地发展,但生产呢?想象一下,在生产中,您的服务器执行相同类型的神奇恒定加载(自动加载)。这实际上并不是世界末日,您在生产环境中启动服务器,人们开始浏览您的页面的速度会稍微慢一些,因为某些文件需要自动加载。是的,当服务器“预热”时,这几个初始请求的速度会变慢,但也没有那么糟糕。然而,这并不是故事的结局。

如果您在 ruby​​ 1.9.x 上运行(如果我没记错的话),那么像这样的自动请求文件不是线程安全的。因此,如果您使用像 puma 这样的服务器,您将会遇到问题。即使您没有使用多线程服务器,您仍然最好在启动时“主动”要求整个应用程序。这意味着在生产中,您希望在启动应用程序时完全需要每个模型、每个控制器等,并且您不介意较长的启动时间。这称为急切加载。所有 ruby​​ 文件都会被急切地加载,明白吗?但是,如果您的 Rails 应用程序没有一个require陈述?那就是那里eager_load_paths无论您在其中放入什么,这些路径下的所有目录中的所有文件都将在生产启动时需要。希望这能解决问题。

重要的是要注意eager_load_paths在开发环境中并不活跃,因此您在其中放入的任何内容都不会在开发中立即需要,只会在生产中需要。

同样重要的是要注意,只需将一些东西放入autoload_paths不会使其在生产中急切加载。很遗憾。你必须明确地将它放入eager_load_paths以及。

另一个有趣的怪癖是,在每个 Rails 应用程序中,所有目录都位于app/都自动在两个autoload_paths and eager_load_paths,这意味着在那里添加目录不需要进一步的操作。

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

Rails 4 中的 autoload_paths 与 eager_load_paths 令人困惑 的相关文章

  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 如何运行使用 Rails 模型的 Ruby 任务?

    我有一个带有一些基本模型的 Rails 应用程序 该网站显示从其他来源检索到的数据 因此 我需要编写一个 Ruby 脚本来在数据库中创建新实例 我知道我可以使用测试挂钩来做到这一点 但我不确定这在这里是否有意义 我不确定这个任务应该是什么样
  • Ruby on Rails - 向所有路由添加 ID 参数

    我想知道在 Rails 路由中实现以下功能的最佳方法是什么 场景 一个网站 用户注册账户 gt accountID 账户 成为网站内的主要实体 例子 https basecamp com ID https basecamp com ID 将
  • Rails 3.1 使用 app/assets/images/subdirectory 下的图像

    在我的 Rails 3 1 应用程序中 我将图像存储在app assets images jquery ui 我不知道如何在 CSS 中访问这些 assets image name png and assets jquery ui imag
  • 如何使用 rspec 测试 mandrill api

    因此 我的客户报告说 许多电子邮件都发给了错误的人 我想编写一些功能测试来查找并确保他们收到电子邮件以及我的规格中的内容 我有 mandrill mailer 它使用 mandrill api 在它发送之前我想看看消息是什么 例如 创建新用
  • Rails 返回 JSON 序列化属性 with_in Different_access

    我以前有 serialize params JSON 但这会返回 JSON 并将哈希键符号转换为字符串 我想使用符号引用哈希 这在使用哈希时最常见 我向它提供符号 Rails 返回字符串 为了避免这种情况 我创建了自己的 getter se
  • 如何在 Haml 中编写 if 条件?

    怎么写if and if elseRuby on Rails 应用程序的 Haml 语句 HAML 是基于缩进的 解析器可能很棘手 在 Haml 中不需要使用 end 请改用缩进 在 Haml 中 只要在 Ruby 计算命令之后增加缩进 就
  • Rails Partial (Rails 3, HAML) 任意慢

    我使用的是 Rails 3 0 1 HAML 0 3 22 和 Mongrel 1 1 5 MongoMapper 不是 AR 我正在渲染一个列表 每个列表项都是它自己的部分 每次页面渲染其中一个列表项部分时 渲染时间都会延长近 100 倍
  • Rails 3.0.0.beta 和 Facebooker:还有其他人看到以下内容吗?

    我的 Rails 服务器在安装 facebooker 插件后似乎崩溃了 任何有关解决此问题的建议都会很棒 我正在使用 Rails 3 0 0 beta 和 facebooker 以下是我看到的步骤和错误 rails v Rails 3 0
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • 如何使用Factory Girl生成回形针附件?

    我有一个包含许多图像的模型 Person 其中图像有一个称为数据的回形针附件字段 下面显示了缩写版本 class Person has many images end class Image has attached file data b
  • 如何验证数值的小数位数?

    我在中间进行了验证 如下所示 validates numericality of shoe size message gt Please input a number 但这还不够 因为用户可以输入一些值 例如 42 222222221212
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • Rails:渲染不起作用,仍然出现“模板丢失”

    我目前正在学习 Rails 指南 我完成了这些步骤 但仍然遇到错误 我的 Ruby 版本是ruby 2 1 1p76Rails 版本是4 0 4 按照指南的指示 我创建了一个Article Controller class Articles
  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J

随机推荐

  • 来自子进程的大数据块的 pexpect 超时

    我正在使用 pexpect 调用另一个提示输入 raw input 的 python 脚本 py27 我试图围绕这个脚本构建一个 GUI 包装器而不修改它 我遇到的问题是 我调用的脚本在下一个命令提示符之前执行时返回了大量数据 例如 10K
  • 如何在集成测试中使用 Propagation.REQUIRES_NEW 回滚嵌套事务

    我对扩展以下基类的各种服务进行了几个集成测试 ContextConfiguration locations classpath applicationContext test xml TransactionConfiguration tra
  • 在 Firebase 中对数据进行排序

    我正在使用 Firebase listview 如下所示 它的工作方式就像一个魅力 但问题是它在我的 listview lv 末尾显示子项 Posts 中最后按下的键 我希望最后按下的键最重要的是显示 或者我是否可以按日期对其进行排序 qu
  • MS Access SQL,更改数据类型

    当尝试在 Access 的设计模式下将数据类型从文本更改为数字 使用接近 2 GB 的数据库 时 我不断收到 磁盘空间或内存不足 错误 因此我找到了一种解决方法 基本上创建一个新列 将数据类型设置为数字 复制旧列内容 删除旧列并将新列重命名
  • 给定源顶点,查找有向图中具有环路的所有路径

    我无法解决这个问题 我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环 即不允许重复 当然除了循环在路径上连接回的单个重复顶点 我知道如何使用 DFS 访问来查找图形是否有循环 但我找不到一种方法来使用它来查找
  • 如何正确地将React组件存储在单独的文件中并导入React?

    我已经完成了一些 React 教程的介绍 并尝试将迄今为止的一些知识运用起来 我已经成功地在 a 中创建了一些组件
  • 如何获取UISlider拇指图像的中心

    我正在创建一个自定义UISlider测试一些界面创意 主要是基于使拇指图像更大 我找到了如何做到这一点like so UIImage thumb UIImage imageNamed newThumbImage 64px png self
  • 如何在使用邻接矩阵表示的大型网络中找到桥梁(社区连接节点)

    我有大约 10K 到 100K 个节点的网络 这些节点都已连接 这些节点通常被分组为社区集群 这些社区集群之间通过许多边紧密相连 并且存在集线器等 在社区之间存在具有一些边的节点bridging 连接社区在一起 这些数据集位于邻接矩阵中 我
  • htaccess 全部重写为index.html

    我正在尝试写 htaccess文件 以便无论用户请求什么 他都会获得该页面index html 我写过这个 Options FollowSymlinks RewriteEngine on RewriteRule index html NC
  • APC 命中/未命中和配置

    APC 操作码缓存中的 命中和未命中 是什么 我已经安装了 APC 并且运行得很好 但是我有 一些 失误 我想知道这是否是 坏 的 另外 我正在运行 Openx 因此 很快就会填满 缓存完整计数 我需要在配置中更改哪些内容才能最大限度地减少
  • 打印大型 TCL 项目的源层次结构

    因此 我正在处理一个大型 TCL 项目 并且认为构建一个树状视图来显示文件在项目中的来源方式会很酷 我修改了源命令以执行以下操作 rename source real source proc source args set file han
  • JavaFx 12 Spring,Maven 未找到前缀插件

    我在尝试使用 javafx 和 spring 调试项目时遇到问题 我的pom XML
  • UISplitViewController:如何强制在应用程序启动时显示主弹出框? (肖像)

    在 iPad 应用程序中 我使用 UISplitViewController 当应用程序以纵向模式启动时 我需要强制显示主弹出窗口 现在我正在使用这段代码 它在 iOS 5 0 上运行良好 if UIInterfaceOrientation
  • UWP 从任务更新 UI

    我有一个应用程序 它正在检查本地网络中的网络范围 用于运行http服务 所以这意味着我正在检查 f e 从 10 0 0 1 到 10 0 0 255 问题来了 在PC上运行时 速度足够 但在Lumia 950上运行时 速度不够 所以我想在
  • 如何使用 JOINED 继承策略和 Hibernate 创建现有超级对象的子对象

    如何使用 Hibernate 创建持久化超级对象的子对象的正确方法是什么 考虑以下示例 在数据库中被持久化UserID 为 1 名字为 Kevin 激光名字为 Smith 到时候新Entity的数据库模型扩展了Auditor这是哪个子类Us
  • 从外部类访问私有变量 - iOS

    我在类中有一个私有变量 我试图从外部类访问该变量 我有办法做到这一点吗 根据定义 私有实例变量是私有的 您无法从外部访问它们 如果您是该类的作者 则应该为变量提供访问器方法 如果不是 则应避免访问该变量 但是 有一些方法可以规避该限制 您可
  • 在应用程序启动时清除所有会话

    我注意到 当我重新启动 ASP Net 应用程序时 会记住已登录用户的凭据 并且他们可能会发现自己已自动登录 只要不保留在登录时设置的用户会话变量 这种行为就是不需要的 那么 我怎样才能 忘记 应用程序启动时的所有会话呢 我发现我无法使用S
  • Spring WebApp中使用Elasticsearch客户端时出现链接错误

    我在尝试将 Elasticsearch java 客户端包含在我的 Web 应用程序中时遇到问题 我有所需的依赖项 并且我正在初始化 销毁 Spring bean 中创建客户端 作为一个简单的测试 如下所示 Override public
  • 找不到 gem Railties (>= 0.a) (Gem::GemNotFoundException)

    我已经看到了一些其他问题 尝试了他们的建议 但没有一个对我有用 我已经使用 Rails 大约一年了 刚刚开始一个新的 Rails 项目 突然遇到了问题 我卸载并尝试重新安装所有 Ruby 和 Rails Ruby 很好 但 Rails 不行
  • Rails 4 中的 autoload_paths 与 eager_load_paths 令人困惑

    我读了一篇关于 Rails load paths 的文章 这里是link http hakunin com rails3 load paths 但是 我仍然对两者之间的区别感到困惑autoload paths and eager load