我想我在上面的帖子中误导了大家。reloadable_patch 对 Discourse 开发很有帮助,但 @david 已经非常清楚地解释了它的用法:
插件 plugin.rb 中 after_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 - 执行可重载补丁
- (太好了,插件的覆盖仍然生效)