Enquanto testava algumas alterações não relacionadas à exclusão de tópicos em uma instância local de desenvolvimento, a exclusão de um tópico retornou um 500 Internal Server Error.
A instância de desenvolvimento que gerou o erro estava executando exatamente este commit do Discourse:
A requisição foi:
DELETE /t/35
e a exceção está vindo do callback :post_destroyed do 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'
O callback relevante parece estar tentando chamar:
DiscourseEvents::Calendar::Extractor.destroy(post)
A página completa de erro relata:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
Consequentemente, o navegador recebe um 500, mesmo que PostDestroyer#destroy já tenha alcançado o ponto em que dispara :post_destroyed, o que significa que a exclusão pode já ter sido aplicada antes que o callback lançasse a exceção.
Isso ocorreu em desenvolvimento. DiscourseEvents::Calendar::Extractor é normalmente fornecido por events, então estou me perguntando se isso poderia estar relacionado ao recarregamento em modo de desenvolvimento/estado do plugin, em vez de a implementação em si estar ausente.
Eu estava trabalhando em código de exclusão de tópicos não relacionado na época, mas a exceção em si está inteiramente dentro do manipulador :post_destroyed do discourse-events.
Alguém mais encontrou DiscourseEvents::Calendar::Extractor se tornando indefinido em uma instância de desenvolvimento? Isso poderia estar relacionado ao recarregamento em desenvolvimento/estado do plugin, ou o callback :post_destroyed deveria carregar o extrator de maneira diferente?
