ruby - 导轨 3.2.x : how to reload app/classes dir during development?

标签 ruby ruby-on-rails-3

我有一些 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/

相关文章:

ruby-on-rails-3 - 如何删除 mongodb 数据库?

ruby-on-rails - 无法保存普通的旧多对一嵌套表单

ruby-on-rails - 仅为新条目构建嵌套字段

ruby-on-rails-3 - 初始页面加载时 Bootstrap 选项卡 Pane 中的浮点 Canvas 图表大小错误

ruby-on-rails - slim 的模板 : Is it possible to put two elements on the same line?

javascript - 如何简单初始化一个前十个整数的数组?

ruby-on-rails - Rack-Bug 面板不会出现在我的 Rails 应用程序中

javascript - Rails 4 ExecJS::Listings#index 中的程序错误

mysql - 查询与 activerecord 的交集

ruby - 如何在 ruby​​ 中从 0.0001 计数到 1?