Mientras probaba algunos cambios no relacionados con la eliminación de temas en una instancia de desarrollo local, la eliminación de un tema devolvió un 500 Internal Server Error.
La instancia de desarrollo que produjo el error estaba ejecutando exactamente este commit de Discourse:
La solicitud fue:
DELETE /t/35
y la excepción proviene del callback :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'
El callback relevante parece estar intentando llamar a:
DiscourseEvents::Calendar::Extractor.destroy(post)
La página de error completa informa:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
En consecuencia, el navegador recibe un 500, aunque PostDestroyer#destroy ya ha alcanzado el punto donde desencadena :post_destroyed, por lo que es posible que la eliminación ya se haya aplicado antes de que el callback genere la excepción.
Esto ocurrió en desarrollo. DiscourseEvents::Calendar::Extractor normalmente lo proporciona events, así que me pregunto si esto podría estar relacionado con la recarga en modo de desarrollo o el estado del plugin, en lugar de que la implementación en sí esté ausente.
En ese momento estaba trabajando en código de eliminación de temas no relacionado, pero la excepción en sí está completamente dentro del manejador :post_destroyed de discourse-events.
¿Alguien más ha encontrado que DiscourseEvents::Calendar::Extractor queda indefinido en una instancia de desarrollo? ¿Podría estar relacionado con la recarga en desarrollo o el estado del plugin, o debería el callback :post_destroyed cargar el extractor de manera diferente?
