Rails控制台是否重新加载初始化程序?

Bre*_*dan 3 ruby ruby-on-rails

我正在使用Rails控制台手动测试一些东西,发现我的一个初始化器(在config/initializers下)有一个错误.我退出控制台,进行了更改,再次运行"rails c".令我惊讶的是,更新的初始化程序未执行.

这是我发现的:

- 如果我启动一个新的Bash会话并输入"rails c",则执行所有初始化程序.

- 如果我添加/更改初始化程序,然后在同一个Bash会话中重新运行"rails c",则不会执行初始值设定项.

这在禁用缓存的开发中发生.

到底他妈发生了什么?谢谢.

Jai*_*yer 17

Spring的引入旨在通过将应用程序的副本保留在内存中并仅重新加载更改来加快rails应用程序的加载速度.

不幸的是,有时您的初始化程序可以保持完全相同,但它们需要重新运行.一个例子是"business_time"gem,它生成一个加载YAML文件的初始化程序.您可以更改YAML文件并重新启动控制台,但Spring会发现您的初始化程序没有更改,因此它不会重新运行它.因此,对YAML文件的更改不会引起注意,这是一个非常难以解决的错误.

如果您遇到初始化程序问题,请退出控制台并运行:

bundle exec spring stop
Run Code Online (Sandbox Code Playgroud)

在回到控制台之前.这将迫使重新加载初始化器.

您还可以通过从Gemfile中删除gem来完全禁用Spring.