在 application.rb 中,我有
config.autoload_paths += %W(#{config.root}/lib
所以当我修改lib下的一个类时,我的代码被重新加载。
但是,当我尝试将配置/初始化程序添加到自动加载时,我注意到我的代码没有得到更新。
如果我正在为字符串类编写扩展,则每次修改代码时都必须重新启动 rails。
请指教?
在 application.rb 中,我有
config.autoload_paths += %W(#{config.root}/lib
所以当我修改lib下的一个类时,我的代码被重新加载。
但是,当我尝试将配置/初始化程序添加到自动加载时,我注意到我的代码没有得到更新。
如果我正在为字符串类编写扩展,则每次修改代码时都必须重新启动 rails。
请指教?
初始化器仅在启动 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 时加载,但您可以更轻松地开发和测试您的模块。
希望这可以帮助。
初始化程序文件仅在 rails 服务器启动时加载一次。更改初始化程序值时重新启动服务器。有关详细信息,请参阅 rails初始化指南。
更改时自动重新加载“lib”
您可以自动重新加载 lib 文件。按照链接自动加载并在更改时重新加载 lib 目录
在配置 Rails 应用程序中:config.reload_classes_only_on_change
仅在跟踪文件更改时启用或禁用类的重新加载。默认情况下跟踪自动加载路径上的所有内容并设置为 true。如果config.cache_classes
为真,则忽略此选项。