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

我有一些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”代码必须存在于任何模块之外?

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