Problema de encolamiento de Webhooks post_created, post_edited

Recientemente, enfrentamos un problema con el plugin de calificaciones donde se estaban enviando datos obsoletos o vacíos a los webhooks. Resulta que la razón es que se depende de los DiscourseEvent para encolar los hooks.

Esto hace que el webhook se encole antes de que algunos o todos los plugins ejecuten sus modificaciones, ya que no tenemos ningún mecanismo para asegurar qué se ejecuta antes o después de qué. En particular, el código central tendría mayor prioridad.

Propongo que estos webhooks se encolean después de la llamada a DiscourseEvent.trigger, de modo que en ese punto todos los plugins hayan ejecutado sus modificaciones en el modelo.

¿Qué opinan?

6 Me gusta

Quizás hagas un PR para el cambio; en principio, suena bien.

4 Me gusta

Angus y yo discutimos esto y encontramos una solución muy sencilla para este problema. Parece que está funcionando correctamente.

Escribir el código de on() fuera de after_initialize resuelve el problema. Creo que así es como deberían hacerlo todos los plugins. Creo que el problema estaba de nuestra parte.

La razón por la que esto funciona es que el control entra en plugin.rb antes de que se ejecuten los inicializadores de Rails y, por lo tanto, las llamadas de retorno de on() se registran antes de que se encolen los webhooks.

1 me gusta