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