10

在 application.rb 中,我有

config.autoload_paths += %W(#{config.root}/lib 

所以当我修改lib下的一个类时,我的代码被重新加载。

但是,当我尝试将配置/初始化程序添加到自动加载时,我注意到我的代码没有得到更新。

如果我正在为字符串类编写扩展,则每次修改代码时都必须重新启动 rails。

请指教?

4

2 回答 2

9

初始化器仅在启动 rails 时加载(并且从不重新加载)。修补时,config/initializers您每次都必须重新启动导轨。

当然,您可以确保您的代码已定义,/lib因此您仍然可以通过使用您的测试套件来确保它正常工作。

例如在lib/speaker.rb

module Speaker
  def speak
    puts "Ahum, listen: #{self.to_s}"
  end
end

然后在您的初始化程序中,您可以执行类似的操作

class String
  include Speaker
end

虽然这仍然只会在启动 rails 时加载,但您可以更轻松地开发和测试您的模块。

希望这可以帮助。

于 2012-06-15T12:24:16.913 回答
3

初始化程序文件仅在 rails 服务器启动时加载一次。更改初始化程序值时重新启动服务器。有关详细信息,请参阅 rails初始化指南

更改时自动重新加载“lib”

您可以自动重新加载 lib 文件。按照链接自动加载并在更改时重新加载 lib 目录

在配置 Rails 应用程序中:config.reload_classes_only_on_change仅在跟踪文件更改时启用或禁用类的重新加载。默认情况下跟踪自动加载路径上的所有内容并设置为 true。如果config.cache_classes为真,则忽略此选项。

于 2015-02-16T13:56:25.323 回答