Kürzlich hatten wir ein Problem mit dem Bewertungs-Plugin, bei dem veraltete/leere Daten an die Webhooks übermittelt wurden. Wie sich herausstellte, liegt dies daran, dass für das Einreihen der Hooks auf DiscourseEvents zurückgegriffen wird.
Dadurch wird der Webhook in die Warteschlange gestellt, bevor einige oder alle Plugins ihre Änderungen am Modell vornehmen, da wir keinen Mechanismus haben, um sicherzustellen, was vor oder nach was ausgeführt wird. Insbesondere hat der Kerncode höhere Priorität.
Ich schlage vor, diese Webhooks erst nach dem Aufruf von DiscourseEvent.trigger in die Warteschlange zu stellen, sodass zu diesem Zeitpunkt alle Plugins ihre Änderungen am Modell vorgenommen haben.
Ich und @angus haben dies besprochen und eine sehr einfache Lösung für dieses Problem gefunden. Es scheint gut zu funktionieren.
Das Schreiben des on()-Codes außerhalb von after_initialize löst das Problem. Ich denke, so sollten alle Plugins vorgehen. Ich glaube, das Problem lag auf unserer Seite.
Der Grund, warum dies funktioniert, ist, dass die Steuerung in plugin.rb eintritt, bevor die Rails-Initialisierer ausgeführt werden, und daher werden die on()-Callbacks registriert, bevor die Webhooks in die Warteschlange gestellt werden.