Rails 3.2.x:如何在开发过程中重新加载app/classes目录?

Geo*_*old 7 ruby ruby-on-rails-3

我有一些Rails代码不能完全适合模型或控制器框.所以根据这个答案,我创建了一个app/classes目录.Rails 3似乎自动将其添加到Rails中的"加载路径",我的应用程序正确地找到了我在那里定义的类,而不需要使用require语句.

但是,代码输入app/classes不会在开发模式下重新加载; 如果我进行更改,我需要重新启动服务器以查看更改.

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

config.autoload_paths += %W(#{config.root}/app/classes)
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

我让我的课程包含在一个模块中.一旦我删除了周围的"MyModule",它就突然变得可以重新加载了.来自Java背景,并且受到污染全局命名空间的Ruby代码的焚烧,我养成了将所有东西都放在模块中的习惯.我猜Rails"app"代码必须在任何模块之外生活吗?

tad*_*man 2

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