Кажется, я ввёл вас в заблуждение в предыдущих сообщениях. reloadable_patch полезен для разработки в Discourse, но @david очень хорошо объяснил его использование:
Всё, что находится внутри блока after_initialize в файле plugin.rb, загружается только при запуске приложения, а не при последующих перезагрузках.
Итак, предположим, вы хотите добавить что-то в сериализатор пользователя. В обычном случае поведение будет следующим:
При запуске:
- Discourse загружает
user_serializer.rb - Discourse загружает
plugin.rb, который содержит переопределение дляuser_serializer
При перезагрузке:
- Discourse перезагружает
user_serializer.rb - (патч из plugin.rb не перезагружается, переопределение плагина теряется)
С нашей системой reloadable_patch:
При запуске:
- Discourse загружает
user_serializer.rb - Discourse загружает
plugin.rbи регистрируетreloadable_patchдля user_serializer - Выполняются reloadable патчи
При перезагрузке:
- Discourse перезагружает
user_serializer.rb - Выполняются reloadable патчи
- (ура, переопределение плагина продолжает работать)