重新加载rails初始化程序

时间:2012-06-15 09:44:34

标签: ruby-on-rails ruby-on-rails-3

在application.rb中,我有

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

因此,当我在lib下修改一个类时,我的代码会重新加载。

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

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

请指教?

2 个答案:

答案 0 :(得分:8)

初始化程序仅在启动rails时加载(并且从不重新加载)。在config/initializers中进行修改时,您每次都会重新启动rails。

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

E.g。在lib/speaker.rb

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

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

的操作
class String
  include Speaker
end

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

希望这有帮助。

答案 1 :(得分:3)

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

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

您可以自动重新加载lib文件。关注链接Autoload and Reload lib directory on change

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