重新加载 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 初始化器的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 - Ajax 刷新后重新初始化 Javascript?

Rails 3.2 - 无法加载初始化文件的模块

在 Rails.application 初始化器中导入模块

Rails 3.2 - 无法加载初始化程序文件的模块

为 Rails 加载配置文件的顺序是啥?

在 Rails 4 中自动加载 lib 文件