我有一些 Rails 代码不适合模型或 Controller 盒。所以根据this answer ,我创建了一个 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 秒就偶然发现了解决方案:
我将我的类(class)封装在一个模块中。一旦我删除了周围的“MyModule”,它突然变得可重新加载。来自 Java 背景,并且被污染全局 namespace 的 Ruby 代码烧毁,我养成了将所有东西放在模块中的习惯。我想 Rails“app”代码一定存在于任何模块之外?
最佳答案
您是在单独的文件中声明模块,还是在类中隐式声明它?这可能会影响自动加载行为。 模块 Foo;类 Bar
与 类 Foo::Bar
。如果 Rails 自动加载器找不到与 Foo 模块一起使用的 foo.rb
,它可能会跳过重新加载它。
关于ruby - 导轨 3.2.x : how to reload app/classes dir during development?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471543/