Problema na fila de Webhooks post_created, post_edited

Recentemente, enfrentamos um problema com o plugin de avaliações, onde dados desatualizados ou vazios estavam sendo enviados para os webhooks. Acontece que o motivo é que os DiscourseEvents estão sendo utilizados para enfileirar os hooks.

Isso faz com que o webhook seja enfileirado antes que alguns ou todos os plugins executem suas modificações, pois não temos nenhum mecanismo para garantir a ordem de execução. Especialmente, o código principal tem prioridade mais alta.

Estou propondo que esses webhooks sejam enfileirados após a chamada DiscourseEvent.trigger, para que, nesse ponto, todos os plugins já tenham executado suas modificações no modelo.

O que acham?

6 curtidas

Talvez faça um PR para a mudança; em princípio, parece OK.

4 curtidas

Eu e o @angus discutimos isso e encontramos uma solução muito simples para esse problema. Parece que está funcionando bem.

Escrever o código do on() fora do after_initialize resolve o problema. Acho que é assim que todos os plugins deveriam fazer. Acredito que o problema era da nossa parte.

A razão pela qual isso funciona é que o controle entra no plugin.rb antes dos inicializadores do Rails serem executados e, portanto, os callbacks do on() são registrados antes que os webhooks sejam enfileirados.

1 curtida