Post_created, post_edited Webhooks 큐 처리 문제

최근, 레이팅 플러그인에서 웹훅에 스테일/빈 데이터가 전달되는 문제를 겪었습니다. 그 이유는 DiscourseEvent가 훅의 큐잉(enqueuing)에 의존하고 있기 때문이었습니다.

이는 어떤 플러그인이나 모든 플러그인이 수정 사항을 실행하기 전에 웹훅이 큐에 추가되는 결과를 초래합니다. 우리는 무엇이 먼저/나중에 실행되는지를 보장하는 메커니즘이 없기 때문입니다. 특히, 코어 코드가 더 높은 우선순위를 갖게 됩니다.

따라서, 모든 플러그인이 모델에 대한 수정 사항을 실행한 시점에 해당 웹훅이 큐에 추가되도록 DiscourseEvent.trigger 호출 후에 큐잉되도록 제안합니다.

의견 있으신가요?

변경 사항을 PR로 올려도 좋을 것 같습니다. 원칙적으로는 괜찮아 보입니다.

저와 @angus가 이 문제를 논의한 결과, 아주 간단한 해결책을 찾았습니다. 지금은 잘 동작하는 것 같습니다.

on() 코드를 after_initialize 외부에 작성하면 문제가 해결됩니다. 모든 플러그인이 이렇게 처리하는 것이 적절하다고 생각합니다. 문제는 우리 쪽에 있었던 것 같습니다.

이렇게 하면 컨트롤이 rails 초기화 프로그램이 실행되기 전에 plugin.rb로 진입하므로, 웹훅이 큐에 추가되기 전에 on() 콜백이 등록되기 때문입니다.