로컬 개발 인스턴스에서 무관한 토픽 삭제 관련 변경 사항을 테스트하던 중, 토픽을 삭제하려고 했더니 500 Internal Server Error가 반환되었습니다.
해당 에러가 발생한 개발 인스턴스는 정확히 이 Discourse 커밋을 실행 중이었습니다:
요청은 다음과 같았습니다:
DELETE /t/35
그리고 예외는 discourse-events 플러그인의 :post_destroyed 콜백에서 발생했습니다:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
plugins/discourse-events/plugin.rb:639:in 'block (2 levels) in Plugin::Instance#activate!'
lib/plugin/instance.rb:676:in 'block in Plugin::Instance#on'
lib/discourse_event.rb:13:in 'block in DiscourseEvent.trigger'
lib/discourse_event.rb:12:in 'DiscourseEvent.trigger'
lib/post_destroyer.rb:91:in 'PostDestroyer#destroy'
app/controllers/topics_controller.rb:818:in 'TopicsController#destroy'
해당 콜백은 다음을 호출하려고 시도하는 것으로 보입니다:
DiscourseEvents::Calendar::Extractor.destroy(post)
전체 에러 페이지에는 다음과 같이 보고됩니다:
NameError (uninitialized constant DiscourseEvents::Calendar::Extractor)
브라우저는 PostDestroyer#destroy가 이미 :post_destroyed를 트리거하는 지점에 도달했음에도 불구하고 500 오류를 수신합니다. 따라서 콜백이 예외를 발생시키기 전에 삭제가 이미 적용되었을 수 있습니다.
이것은 개발 환경에서 발생했습니다. DiscourseEvents::Calendar::Extractor는 일반적으로 events 플러그인에 의해 제공되므로, 구현 자체가 누락된 것이 아니라 개발 모드 리로딩/플러그인 상태와 관련이 있을 수 있는지 궁금합니다.
당시 저는 무관한 토픽 삭제 코드 작업을 하고 있었지만, 예외 자체는 discourse-events의 :post_destroyed 핸들러 내부에서 완전히 발생하고 있습니다.
혹시 다른 분들도 개발 인스턴스에서 DiscourseEvents::Calendar::Extractor가 정의되지 않는 상황을 경험해 보셨나요? 이것이 개발 리로딩/플러그인 상태와 관련이 있을 수 있으며, 아니면 :post_destroyed 콜백이 추출기를 다른 방식으로 로드해야 하는 것일까요?
