قد يسبب discourse-events خطأ 500 عند حذف موضوع في وضع التطوير: Calendar::Extractor غير مُهيّأ

بينما كنت أختبر بعض التغييرات غير المتعلقة بحذف الموضوعات في نسخة تطوير محلية، أعاد حذف الموضوع خطأ 500 Internal Server Error.

كانت نسخة التطوير التي أنتجت الخطأ تعمل على هذا الالتزام (commit) المحدد من Discourse:

كان الطلب كالتالي:

DELETE /t/35

والاستثناء قادم من مستدعي :post_destroyed في discourse-events:

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'

يبدو أن المستدعي (callback) ذي الصلة يحاول استدعاء:

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

تقرير صفحة الخطأ الكامل يقول:

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

وبالتالي، يتلقى المتصفح خطأ 500 على الرغم من أن PostDestroyer#destroy قد وصل بالفعل إلى النقطة التي يستدعي فيها :post_destroyed، مما يعني أن الحذف قد تم تطبيقه بالفعل قبل أن يرمي المستدعي الاستثناء.

حدث هذا في وضع التطوير. يتم توفير DiscourseEvents::Calendar::Extractor عادةً بواسطة #events، لذا أنا أتساءل عما إذا كان هذا قد يكون مرتبطًا بإعادة التحميل في وضع التطوير / حالة الإضافات (plugins) بدلاً من غياب التنفيذ نفسه.

كنت أعمل على كود غير متعلق بحذف الموضوعات في ذلك الوقت، لكن الاستثناء نفسه يقع بالكامل داخل معالج :post_destroyed في discourse-events.

هل واجه أي شخص آخر حالة يصبح فيها DiscourseEvents::Calendar::Extractor غير معرّف في نسخة تطوير؟ هل يمكن أن يكون هذا مرتبطًا بإعادة التحميل في وضع التطوير / حالة الإضافات، أم يجب أن يحمّل المستدعي :post_destroyed المستخرج (extractor) بطريقة مختلفة؟

إعجاب واحد (1)