Discourse-events può causare errori 500 durante l'eliminazione di un argomento in ambiente di sviluppo: Calendar::Extractor non inizializzato

Durante i test su alcune modifiche relative alla cancellazione di argomenti non correlate, la cancellazione di un argomento ha restituito un errore 500 Internal Server Error.

L’istanza di sviluppo che ha generato l’errore stava eseguendo esattamente questo commit di Discourse:

La richiesta era:

DELETE /t/35

e l’eccezione proviene dal callback :post_destroyed di 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'

Il callback pertinente sembra tentare di chiamare:

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

La pagina di errore completa riporta:

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

Di conseguenza, il browser riceve un errore 500, anche se PostDestroyer#destroy ha già raggiunto il punto in cui innesca :post_destroyed, il che significa che la cancellazione potrebbe essere già stata applicata prima che il callback generasse l’eccezione.

Ciò si è verificato in ambiente di sviluppo. DiscourseEvents::Calendar::Extractor è normalmente fornito da events, quindi mi chiedo se questo problema potrebbe essere correlato al ricaricamento in modalità di sviluppo o allo stato dei plugin, piuttosto che all’assenza effettiva dell’implementazione.

All’epoca stavo lavorando su codice di cancellazione argomenti non correlato, ma l’eccezione stessa si trova interamente all’interno del gestore :post_destroyed di discourse-events.

Alcun altro ha riscontrato DiscourseEvents::Calendar::Extractor che diventa indefinito in un’istanza di sviluppo? Potrebbe essere correlato al ricaricamento in sviluppo o allo stato dei plugin, oppure il callback :post_destroyed dovrebbe caricare l’estrattore in modo diverso?

1 Mi Piace

Grazie per aver segnalato questo problema. L’ho riprodotto sul mio computer locale e la buona notizia è che dovrebbe verificarsi solo durante lo sviluppo, quando viene attivato un ricaricamento del codice.

Ho aperto una PR per correggere il caricamento in fase di sviluppo:

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

2 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 15 ore. Non sono più consentite nuove risposte.