重新加载 rails 初始化器
Posted
技术标签:
【中文标题】重新加载 rails 初始化器【英文标题】:Reload rails initializers 【发布时间】:2012-06-18 09:10:36 【问题描述】:在application.rb中,我有
config.autoload_paths += %W(#config.root/lib
所以当我修改 lib 下的类时,我的代码会重新加载。
但是,当我尝试将配置/初始化程序添加到自动加载时,我注意到我的代码没有得到更新。
如果我正在为 string 类编写扩展,则每次修改代码时都必须重新启动 rails。
请指教?
【问题讨论】:
还有一个有害的问题,当一个类在开发模式下重新加载时,在初始化器中设置的所有类属性都会丢失。见***.com/q/49948221/326840 【参考方案1】:初始化程序仅在启动 rails 时加载(并且从不重新加载)。在修改 config/initializers
时,您每次都必须重新启动 rails。
当然,您可以确保您的代码在 /lib
中定义,因此您仍然可以通过使用您的测试套件来确保它正常工作。
例如在lib/speaker.rb
写
module Speaker
def speak
puts "Ahum, listen: #self.to_s"
end
end
然后在您的初始化程序中,您可以执行类似的操作
class String
include Speaker
end
虽然这仍然只会在启动 rails 时加载,但您可以更轻松地开发和测试您的模块。
希望这会有所帮助。
【讨论】:
【参考方案2】:初始化程序文件仅在 rails 服务器启动时加载一次。更改初始化程序值时重新启动服务器。 有关详细信息,请参阅 rails initialization guides。
更改时自动重新加载“lib”
您可以自动重新加载 lib 文件。关注链接Autoload and Reload lib directory on change
在配置 Rails 应用程序中:config.reload_classes_only_on_change
仅在跟踪文件更改时启用或禁用类的重新加载。默认情况下跟踪自动加载路径上的所有内容并设置为 true。如果config.cache_classes
为真,则忽略此选项。
【讨论】:
这就是我的问题所在;我不想重新启动服务器。我想要一种更好的方式来调试我的代码。以上是关于重新加载 rails 初始化器的主要内容,如果未能解决你的问题,请参考以下文章