Discourse-events peut provoquer une erreur 500 lors de la suppression d'un sujet en développement : Calendar::Extractor non initialisé

Lors de la test de modifications relatives à la suppression de sujets, sans rapport avec le problème principal, dans une instance de développement locale, la suppression d’un sujet a renvoyé une erreur 500 Internal Server Error.

L’instance de développement qui a généré l’erreur exécutait exactement ce commit de Discourse :

La requête était :

DELETE /t/35

et l’exception provient du rappel :post_destroyed de 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'

Le rappel concerné semble tenter d’appeler :

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

La page d’erreur complète signale :

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

Le navigateur reçoit par conséquent une erreur 500, même si PostDestroyer#destroy a déjà atteint le point où il déclenche :post_destroyed, ce qui signifie que la suppression a peut-être déjà été appliquée avant que le rappel ne lève l’exception.

Cela s’est produit en développement. DiscourseEvents::Calendar::Extractor est normalement fourni par events, donc je me demande si cela pourrait être lié au rechargement en mode développement/à l’état des plugins plutôt qu’à l’absence de l’implémentation elle-même.

Je travaillais sur du code de suppression de sujets sans rapport à ce moment-là, mais l’exception elle-même se situe entièrement dans le gestionnaire :post_destroyed de discourse-events.

D’autres ont-ils rencontré DiscourseEvents::Calendar::Extractor devenant non défini dans une instance de développement ? Cela pourrait-il être lié au rechargement en développement/à l’état des plugins, ou le rappel :post_destroyed devrait-il charger l’extracteur différemment ?

1 « J'aime »

Merci d’avoir signalé ce problème. Je l’ai reproduit sur ma machine locale, et la bonne nouvelle est qu’il ne devrait se produire que lors du développement, lorsqu’un rechargement du code est déclenché.

J’ai une PR pour corriger le chargement en développement :

https://github.com/discourse/discourse/pull/43359

2 « J'aime »

Ce sujet a été automatiquement fermé après 15 heures. De nouvelles réponses ne sont plus autorisées.