Discourse-eventsがトピック削除時に500エラーを引き起こす場合がある(開発環境): Calendar::Extractorが未初期化

ローカル開発インスタンスで無関係なトピック削除の変更をテストしていたところ、トピックの削除時に 500 Internal Server Error が返されました。

エラーが発生した開発インスタンスは、以下の Discourse コミットを正確に実行していました:

リクエストは以下の通りでした:

DELETE /t/35

例外は discourse-events:post_destroyed コールバックから発生しています:

NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)

plugins/discourse-events/plugin.rb:639:in 'block (2 levels) in Plugin::Instance#activate!'
lib/plugin/instance.rb:676:in 'block in Plugin::Instance#on'
lib/discourse_event.rb:13:in 'block in DiscourseEvent.trigger'
lib/discourse_event.rb:12:in 'DiscourseEvent.trigger'
lib/post_destroyer.rb:91:in 'PostDestroyer#destroy'
app/controllers/topics_controller.rb:818:in 'TopicsController#destroy'

関連するコールバックは、以下の呼び出しを試みているようです:

DiscourseEvents::Calendar::Extractor.destroy(post)

完全なエラーページには以下が報告されています:

NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)

PostDestroyer#destroy:post_destroyed をトリガーする地点にすでに到達しているため、コールバックが例外をスローする前に削除が適用されている可能性があります。その結果、ブラウザは 500 エラーを受信します。

これは開発環境で発生しました。DiscourseEvents::Calendar::Extractor は通常 events によって提供されるため、実装自体が欠落しているのではなく、開発モードの再読み込みやプラグインの状態に関連しているのではないかと考えています。

当時、私は無関係なトピック削除のコードに取り組んでいましたが、例外自体は完全に discourse-events:post_destroyed ハンドラー内部で発生しています。

開発インスタンスで DiscourseEvents::Calendar::Extractor が未定義になるという現象に遭遇された方はいますか?これは開発環境の再読み込みやプラグインの状態に関連している可能性がありますか?それとも、:post_destroyed コールバックはエクストラクターを異なる方法でロードすべきでしょうか?

「いいね!」 1