Недавно мы столкнулись с проблемой в плагине рейтингов: в вебхуки передавались устаревшие или пустые данные. Оказалось, что причина в том, что для постановки вебхуков в очередь полагались на DiscourseEvent.
Из-за этого вебхук помещается в очередь до того, как некоторые или все плагины внесут свои изменения в модель, поскольку у нас нет механизма, гарантирующего порядок выполнения. Особенно это касается ядра, которое имеет более высокий приоритет.
Я предлагаю ставить эти вебхуки в очередь после вызова DiscourseEvent.trigger, чтобы к этому моменту все плагины уже внесли свои изменения в модель.
Я и @angus обсудили это и нашли очень простое решение проблемы. Похоже, что оно работает корректно.
Вынесение кода on() за пределы after_initialize решает проблему. Мне кажется, что так должны поступать все плагины. Думаю, проблема была на нашей стороне.
Причина, по которой это работает, заключается в том, что выполнение переходит в файл plugin.rb до запуска инициализаторов Rails, поэтому колбэки on() регистрируются до того, как вебхуки будут помещены в очередь.