Acho que te levei a um erro nos posts acima. reloadable_patch é útil para o desenvolvimento do Discourse, mas @david explicou muito bem seu uso:
Qualquer coisa dentro do bloco after_initialize do plugin.rb é carregada apenas durante a inicialização da aplicação, e não nas recargas subsequentes.
Então, supondo que você queira adicionar algo ao serializador de usuário. O comportamento normal seria assim:
Na inicialização:
- O Discourse carrega
user_serializer.rb - O Discourse carrega
plugin.rb, que tem uma sobrescrita parauser_serializer
Na recarga:
- O Discourse recarrega
user_serializer.rb - (o patch do
plugin.rbnão é recarregado, a sobrescrita do plugin é perdida)
Com nosso sistema reloadable_patch:
Na inicialização:
- O Discourse carrega
user_serializer.rb - O Discourse carrega
plugin.rbe registra oreloadable_patchpara o serializador de usuário - Os patches recarregáveis são executados
Na recarga:
- O Discourse recarrega
user_serializer.rb - Os patches recarregáveis são executados
- (uau, a sobrescrita do plugin ainda está funcionando)