7

我有一些 Rails 代码不适合模型或控制器盒。所以根据这个答案,我创建了一个app/classes目录。Rails 3 似乎会自动将其添加到 Rails 中的“加载路径”中,并且我的应用程序可以正确找到我在其中定义的类,而无需使用require语句。

但是,app/classes在开发模式下不会重新加载代码;如果我进行更改,我需要重新启动服务器才能看到该更改。

在 Rails 3.2.x 中使给定目录“可重新加载”的正确方法是什么?这里的一些答案建议这样做:

config.autoload_paths += %W(#{config.root}/app/classes)

但我相信这只是添加app/classes到初始目录集以在其中查找代码的效果;似乎并没有让它们为每个请求重新加载(而且在 3.x 中似乎app/*是自动添加的)。

更新

数字,我在发布问题后仅 30 秒就偶然发现了解决方案:

我将我的课程包裹在一个模块中。一旦我删除了周围的“MyModule”,它突然变得可重新加载。来自 Java 背景,并且被污染全局命名空间的 Ruby 代码烧毁,我养成了将所有内容都放在模块中的习惯。我猜Rails“app”代码必须存在于任何模块之外?

4

1 回答 1

2

您是在单独的文件中声明模块,还是在类中隐式声明它?这可能会对自动加载行为产生影响。module Foo; class Barclass Foo::Bar.. 如果 Rails 自动加载器找不到foo.rb与 Foo 模块一起使用的模块,它可能会跳过重新加载它。

于 2012-07-13T15:09:14.183 回答