为什么Rails控制台不能加载对ruby文件的更改?

4

我正在编写一个在Rails控制台中运行的脚本。

即使我退出并重新加载Rails控制台,当我更改文件时,它仍然不能识别这些更改。

我该如何让Rails识别和加载对此文件所做的更改?

该文件位于我的应用程序根目录。我加载了Rails控制台并运行:

require 'file.rb'

该文件第一次运行正常,但如果我对文件进行更改,则不会加载更改。我可以删除文件中的所有代码并再次运行该文件,它仍将像编辑之前一样运行。

3
更改哪个文件?它在子目录中吗?您如何运行控制台来执行它?您当前在哪个目录下运行控制台?能否请您将问题具体化?! - CoderDake
2
在每次更改后,请尝试在控制台中运行reload! - MrYoshiji
同意@MrYoshiji的观点,您能否将其发布为答案? - zeantsoi
我不会这样做,直到 @Davey 确认它是他问题的实际解决方案;-) - MrYoshiji
1个回答

14
如果您正在修改存储在`app/`目录中的文件,可以使用`reload!`命令重新加载这些文件。如果您在该目录之外进行更改,则需要退出并重新启动控制台。
需要注意的是,在`require`调用中几乎总是省略`.rb`扩展名。另一件事要记住的是,`require 'file'`会在您的`$LOAD_PATH`中查找名为`file.rb`的内容,并加载第一个匹配项。您可能有两个同名的文件。尝试更改名称以查看是否产生任何影响。
Rails具有相当不错的自动加载程序,因此通常不需要使用`require`,如果您最初将文件放在正确的位置,则会自动加载。例如,`MyClass`可以放在`app/models/my_class.rb`中并将自动加载。自动加载程序也可以配置为查找不同的位置。

1
对于那些在2023年看到这篇文章的人(来自未来的问候!),有一个更新/补充:reload! 命令也会重新加载 config/application.rb 文件中指定的自动加载文件(例如,lib/ 文件夹中的文件),而不仅仅是 app/ 目录下的文件。 - Rick Gladwin
1
对于那些在2023年找到这篇文章的人(来自未来的问候!),我有一个更新/补充:reload! 命令还会重新加载 config/application.rb 文件中用于自动加载的文件(例如 lib/ 文件夹中的文件),而不仅限于 app/ 目录内的文件。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接