上記の投稿で誤解を招いてしまったかもしれません。reloadable_patch は Discourse の開発には役立ちますが、@david がその使い方を非常に良く説明してくれています:
plugin.rb の after_initialize ブロック内のコードは、アプリケーションの起動時 にのみ読み込まれ、その後のリロード時には読み込まれません。
つまり、ユーザーシリアライザーに何かを追加したいと仮定します。通常の動作は以下のようになります:
起動時:
- 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を再読み込みする - リロード可能なパッチが実行される
- (やった、プラグインによるオーバーライドが引き続き機能している)