Rails 中什么时候需要重启服务器?

2024-01-11

我注意到当我更改 Rails 项目文件时,例如html.erb or .css,我不必使用以下命令重新启动服务器rails -s命令。

但我认为当我想安装新的 gem 时我必须这样做。问题是我正在尝试让 jQuery 工作,所以我厌倦了这样做rails -s每时每刻。

谁能告诉我什么时候必须跑步rails -s当我修改我的应用程序时,我什么时候可以不这样做?我所说的不这样做,是指只需刷新网页即可看到更改。


2021 年更新:

由于这个答案是我在 StackOverflow 上最明显的答案,而且它已经很旧了,所以我认为是时候更新它以更深入一些了。它的原始信息并没有错误,但它有点太笼统了,我觉得我可以用我现在所掌握的知识更好地解释它。原答案保留如下。

Rails 与普通 ruby​​ 相比的工作方式是,它基本上需要动态文件,而不需要添加requires 位于文件顶部。现在官方 Rails 指南上有一个关于它的相对深入的页面here https://guides.rubyonrails.org/v6.1/autoloading_and_reloading_constants_classic_mode.html.

从 Rails 6 开始,他们引入了一个新的加载器来管理自动加载源文件的逻辑,将该工作卸载到名为 gem 的zeitwerk https://github.com/fxn/zeitwerk。有还有 Rails 指南的页面 https://guides.rubyonrails.org/v6.1/autoloading_and_reloading_constants.html这解释了新装载机的工作原理。

基本思想是这样的:

  1. Rails 运行一堆配置文件(environment.rb, application.rb, boot.rb, 各自的environments/<environment>.rb, config/routes.rb、初始化器等)。在此启动阶段运行的所有文件都位于config目录,因此如果更改的文件位于config目录,它probably需要重新启动 Rails。

  2. 然后 Rails 开始监视每个文件下的所有文件autoload_paths(默认情况下每个目录app)来检查它们何时发生变化。它还专门监视config/routes.rb file.

  3. 现在有了良好的路由配置,Rails 知道要响应哪些路径以及使用哪些控制器。一旦您点击配置的路线之一,Rails 将运行您的控制器操作。

  4. 每当 ruby​​ 看到它无法识别的常量时,它就会调用该方法const_missing。 Rails 重写此方法来获取常量的名称,并使用它在每个目录中搜索具有相同名称的文件。autoload_paths.

  5. 当它找到该文件时,它会即时需要该文件,并假设它将定义触发该文件的常量const_missing,然后代码继续。

  6. 下次使用相同的常量时,它现在将被定义,因此它甚至不会到达const_missing method.

  7. 最后但并非最不重要的一点是,如果配置cache_classes被设定为false(开发环境中的默认设置),那么每当 Rails 捕获它正在监视的文件之一的更改时,它就会取消设置与该文件关联的常量(它从文件名中得知)。

因此,每当您需要更改第 1 步中加载的任何内容时,经过特殊处理的内容除外config/routes.rb,您需要重新启动Rails。除此之外,Rails 将通过该自动加载机制重新加载,除非将其设置为缓存结果。

在生产中,它也默认配置为预加载类,因此它将在启动服务器之前加载所有类。这是为了避免整体的开销const_missing、文件搜索和动态require thing.

非 ruby​​ 文件(例如资源和视图)都会在请求时由 Rails 读取,因此您可以随时更改它们而无需重新启动 Rails。 (注:生产环境下的资源通常是预编译的,所以改变里面的资源app/assets不会导致任何改变。但它仍然在请求时加载,只是有问题的文件是内部的编译包public目录)。


原答案:

当您需要从头开始重新加载 Rails 时,您需要重新启动服务器。

如果您要添加或删除宝石,那么您将需要重新启动服务器。

如果您更改了 ruby​​ 版本、更改了 Gemfile 或更改了 Rails 内部类中的某些内容,则需要重新启动它,否则应该没问题。但如果出现意外问题,首先应该尝试重新启动服务器。

另外,顺便说一下,如果刷新页面,您只会看到更改config.cache_classes被设定为false(我认为这是开发的默认设置,但不是生产的默认设置)。

Edit:

为了确保每个人都会注意到,塔德曼在评论中说了一件明智的事情,这里的一般经验法则是对 app/ 或 config/routes.rb 或 db/ 之外的任何内容进行更改都需要重新启动。

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

Rails 中什么时候需要重启服务器? 的相关文章

  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 存根和 rspec 旧语法的问题

    我正在编写一些代码并使用 rspec 但收到警告 提示语法已过时 我不太清楚应该如何编写它 it should calculate the value correctly do mock cards Card new clubs 5 Car
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 如何从 Ruby 中的特定相对路径加载文件?

    我正在制作一颗供内部使用的宝石 在其中 我从另一个目录加载一些 YAML in
  • Ruby 是否有一个 Expect 等效 gem?

    Ruby 是否有一个 Expect 等效 gem 我尝试在 code google 和 ruby gems org 上搜索 但遗憾的是它没有出现 FYI Expect http en wikipedia org wiki Expect是一个
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • Watir Webdriver 加载 Chrome 扩展

    我正在尝试使用 Watir 加载 chrome 扩展 但遇到了问题 我发现这个相关问题 能够启动带有 watir webdriver 加载扩展的 chrome https stackoverflow com questions 125867
  • ruby 认为我正在引用顶级常量,即使我指定了完整的命名空间

    在我的应用程序中我有 class User include User Foo end User Foo定义在 app models user foo rb 中 现在我正在使用一个定义自己的库Foo班级 我收到此错误 警告 User Foo
  • 如何配置database.yml以部署到Heroku

    我最近升级到了最新版本的Rails 并且不明白如何将应用程序部署到Heroku 这是我的database yml file default default adapter postgresql pool 5 timeout 5000 dev
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • 即使路由存在,Rspec 命名空间路由规范也会失败

    我在用着rspec rails 2 8 1 and 导轨3 1 3 我正在尝试测试 Admin ZonesController 的路由 我已经通过运行验证了浏览器中存在该路由rake routes 我没有使用 ActiveRecord 如果
  • RSpec:如何在静态方法上使用should_receive?

    我在 lib gcm rb 中有一个模块 require net http require uri module GCM def self dispatch message reg ids data url URI parse GCM UR
  • 如何处理 Nokogiri 中的 404 未找到错误

    我正在使用 Nokogiri 来抓取网页 很少有 url 需要猜测 当它们不存在时 会返回 404 未找到错误 有没有办法捕获这个异常 http yoursite page 38475 gt page number 38475 doesn
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • Ruby 动态变量名

    有没有办法在 Ruby 中创建具有动态名称的变量 我正在读取一个文件 当我找到一个字符串时 会生成一个哈希值 e g file File new games log r file lines do l l split do p if p 1
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win

随机推荐

  • 使用 PowerShell 移动 xlsx 文件中的列

    PowerShell 和 Excel 问题在这里 我有几个电子表格 每个电子表格约有 9000 行数据 我想将 A 列与 B 列交换 并将数据保留在两列中 并使用 PowerShell 来执行此操作 我在谷歌上做了很多查找 看看是否可以做到
  • 如何在同一解决方案中引用来自单独项目的资源 (png)

    我的解决方案的结构如下 Class Library Name Chess Images Pawn png WPF Core 3 1 Project Name ChessApp 主窗口 xaml 我想在我的内部显示 Pawn png 图像主窗
  • C++ 运算符重载将指针类型作为参数?

    我是 C 新手 试图找出指针和引用之间的区别 我刚刚读过 作者在文章中提到day operator day d 不会编译 注意 day是枚举类型 并认为此重载运算符函数的参数必须是 T T 或 T const 类型 其中 T 是类或枚举类型
  • 为什么javascript中bool(true) && string的结果是string?

    测试代码是 console log true abc abc 谁能告诉我为什么结果是abc From 如果可以转换为 false 则返回 expr1 否则 返回 表达式2 因此 当与布尔值一起使用时 返回 true 如果两者都 操作数为真
  • 获取 facebook api 的访问令牌

    要获取访问令牌 GET https graph facebook com oauth access token client id YOUR APP ID client secret YOUR APP SECRET redirect uri
  • Python Pandas TypeError:第一个参数必须是字符串或编译模式

    我很抱歉这个超级简单的问题 但我无法让它发挥作用 我正在清理数据 并且想要添加一个标志 如果名称 分为名字和姓氏两列 错误 我建立了多种模式 但现在我正在处理单独的语句 我可以将所有这些语句合并为一个吗 pattern match incr
  • Rails:使用回形针上传文件

    我想使用回形针上传文件 通过基本的开箱即用设置 我能够将文件上传到默认目录 公共 系统中的某个目录 但是 当我尝试更改 url 或路径 或两者 时 class Cvit lt ActiveRecord Base has attached f
  • 时间:2019-03-17 标签:c#richtextboxoutofmemory

    我编写了一个应用程序 可以读取传入的聊天内容 有点像即时通讯工具 对其进行格式化并将其插入到 Richtextbox 中 如果您让程序运行足够长的时间 您将收到内存不足错误 查看我的代码后 我认为这是因为我从不修剪 Richtextbox
  • 如何布局图像及其左侧和下方的文本?

    我需要制作一个特定于网页的布局 它需要看起来像一篇网络文章 其中包含图像和文本 看图片 由于这在网络世界中很容易做到 所以我不确定如何在 XML 布局中做到这一点 显然 TextView当图像存在时必须位于左侧 并且在到达图像底部后 它必须
  • 如何在springboot中跳过失败的bean以避免reportFailure:771 >>应用程序启动失败

    有没有办法跳过失败 bean 以避免应用程序启动失败 让我解释一下这个场景 我在应用程序启动时创建 hazlecast bean 有时 hazecast 服务器可能不存在 那时 当我启动 springboot 应用程序时 hazecast
  • UI 测试中的呼叫按钮?

    我想知道是否可以从电话方案中点击呼叫按钮 例如 tel 555555555 因为如果我触摸通话按钮 我会收到一条提醒 提示我需要确认通话或取消通话 是否可以 我的代码中有这个 addUIInterruptionMonitor withDes
  • 使用 NSPredicate 删除对象

    我有以下词典 其中有很多子词典 如何删除其中的对象isChanged 1从父字典中使用NSPredicate 0 496447097042228 cellHeight 437 isChanged 1 100000019882803 1936
  • 如何为 PHP 全局设置 CURLOPT_CAINFO?

    我知道我可以在任何特定实例上设置该选项 但是我真正想要的是设置 php ini 或类似的地方 以便在所有项目和所有实例中处理此问题 有谁知道我可以实现这个目标的方法吗 编辑 我对允许证书位于不同服务器上的不同位置的解决方案特别感兴趣 我正在
  • 使用 JavaScript 代替 AppleScript 实现邮件规则自动化

    我正在尝试使用 Javascript 自动化而不是 AppleScript 构建 Mail app 规则 在 OS X Yosemite 上 但我停留在基础知识上 我在 AppleScript 中看到这段代码 using terms fro
  • 如何将参数传递给 Rails 控制器方法,然后使用 JQuery/AJAX 返回值?

    我使用单击函数首先获取数组 位置 然后通过 AJAX 调用将其发布到控制器方法 然后我希望该方法返回一个布尔值以启用 jquery 函数中的 addClass 控制台始终抛出 500 服务器错误 这是 js 文件 document read
  • 安装 GDL 以在 Python 中使用

    我需要使用一些GDL http gnudatalanguage sourceforge net credits php我的 Python 代码中的例程 In the GitHub 仓库 https github com cenit GDL
  • 如何调整对象大小 - Autodesk Forge Viewer

    我怎样才能改变对象的大小 我需要改变物体的高度 例如 我们需要更改门或窗帘的高度 在此代码中我的对象消失了 let change function const viewer oViewer const model viewer model
  • 当涉及到finally块的返回值时,在try块中包含return语句是一个好习惯吗?

    我想知道这是一个好的做法吗return from try block package debug author Owner public class Main public static void main String args Syst
  • t-sql 中的正确/标题大小写

    我正在使用 SQL 2012 RC0 并寻找一个可以将保存名字和姓氏的列转换为正确 标题大小写的函数 我环顾四周 但似乎找不到任何东西 如果有另一篇文章 请告诉我 我会关闭这篇文章 我想要转换的表格列是从 Web 前端的用户输入字段填充的
  • Rails 中什么时候需要重启服务器?

    我注意到当我更改 Rails 项目文件时 例如html erb or css 我不必使用以下命令重新启动服务器rails s命令 但我认为当我想安装新的 gem 时我必须这样做 问题是我正在尝试让 jQuery 工作 所以我厌倦了这样做ra