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

时间:2012-07-13 13:32:57

标签: ruby ruby-on-rails-3

我有一些Rails代码不能完全适合模型或控制器盒。因此,根据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秒就偶然发现了解决方案:

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

1 个答案:

答案 0 :(得分:2)

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