# Discourse 插件和 Rails 6 config/initializers 问题

**URL:** <https://meta.discourse.org/t/discourse-plugins-and-rails-6-config-initializers-question/168373>\
**Category:** Development\
**Created:** [2020年十月27日 11:34 UTC](https://meta.discourse.org/t/discourse-plugins-and-rails-6-config-initializers-question/168373 "2020-10-27T11:34:52Z")\
**Posts on this page:** 1\
**Showing post:** 20

<div class="post-metadata">

**Author:** ![markvanlan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/markvanlan/32/160087_2.png) [@markvanlan](https://meta.discourse.org/u/markvanlan)\
**Post date:** [2020年十一月3日 14:40 UTC](https://meta.discourse.org/t/discourse-plugins-and-rails-6-config-initializers-question/168373/20 "2020-11-03T14:40:41Z")

</div>

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

* * *

插件 `plugin.rb` 中 `after_initialize` 块内的任何内容仅在 [应用启动](https://github.com/discourse/discourse/blob/5140ec9acf29df220ec00cc6a704b73773a86bdc/config/application.rb#L342-L342) 时加载，而不会在随后的重载中加载。

因此，假设您想为用户序列化器（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`
- 执行可重载补丁
- （太好了，插件的覆盖仍然生效）

---

_[View the full topic](https://meta.discourse.org/t/discourse-plugins-and-rails-6-config-initializers-question/168373)._
