Discourse 插件和 Rails 6 config/initializers 问题

我想我在上面的帖子中误导了大家。reloadable_patch 对 Discourse 开发很有帮助,但 @david 已经非常清楚地解释了它的用法:


插件 plugin.rbafter_initialize 块内的任何内容仅在 应用启动 时加载,而不会在随后的重载中加载。

因此,假设您想为用户序列化器(user serializer)添加一些内容。通常的行为如下:

启动时:

  • Discourse 加载 user_serializer.rb
  • Discourse 加载 plugin.rb,其中包含对 user_serializer 的覆盖

重载时:

  • Discourse 重新加载 user_serializer.rb
  • plugin.rb 中的补丁不会被重新加载,插件的覆盖失效)

使用我们的 reloadable_patch 系统:

启动时:

  • Discourse 加载 user_serializer.rb
  • Discourse 加载 plugin.rb 并为 user_serializer 注册 reloadable_patch
  • 执行可重载补丁

重载时:

  • Discourse 重新加载 user_serializer.rb
  • 执行可重载补丁
  • (太好了,插件的覆盖仍然生效)