post_edited 이벤트 회귀 문제일 수 있나요?

Discourse 버그 리포트: latest-release에서 :post_edited 이벤트 회귀

영향 대상: Discourse latest-release 브랜치 (release +122)
상태: 확인된 회귀 - 재현 가능
날짜: 2026년 1월 15일


요약

최근 latest-release 빌드에서 :post_edited DiscourseEvent가 더 이상 발행되지 않고 있습니다. 게시글 수정은 성공적으로 완료되고 리비전이 생성되지만, 플러그인이 의존하는 이벤트는 절대 트리거되지 않습니다. 이로 인해 post_created_edited 자동화 트리거를 사용하는 모든 플러그인과 :post_edited 이벤트를 청취하는 기타 플러그인이 모두 손상되었습니다.


재현 방법 (확인됨)

동일한 Azure AKS 환경 두 곳에서 테스트를 수행하여 이것이 회귀임을 확인했습니다:

업데이트 전 (정상 작동)

  • 버전: v2026.1.0-latest (구버전 빌드)
  • 동작: :white_check_mark: :post_edited 이벤트가 정상적으로 트리거됨
  • 자동화: :white_check_mark: 자동으로 정상 작동

업데이트 후 (오작동)

  • 버전: latest-release +1221 hours ago, release +122
  • 동작: :cross_mark: :post_edited 이벤트가 절대 트리거되지 않음
  • 자동화: :cross_mark: 완전히 손상됨

중요한 발견: 두 환경 모두 업데이트 전에는 정상적으로 작동했습니다. latest-release +122로 업데이트한 후 모두 손상되었습니다. 이는 회귀가 도입되었음을 명확하게 증명합니다.


환경 상세 정보

  • Discourse 버전: latest-release (release +122)
  • Rails 버전: 8.0.4
  • 인프라: Azure Kubernetes Service (AKS)
  • Docker 이미지: discourse/base:2.0.20260109-0020
  • 배포: 표준 Discourse Docker 설치

테스트 절차

테스트 1: 이벤트 리스너 (이벤트가 절대 트리거되지 않음을 증명)

# In Rails console
File.open('/tmp/post_edited_test.log', 'w') { |f| f.write("Test started at #{Time.now}\n") }

DiscourseEvent.on(:post_edited) do |post, topic_changed, revisor|
  File.open('/tmp/post_edited_test.log', 'a') do |f|
    f.write("[#{Time.now}] :post_edited fired! Post #{post.id}\n")
  end
end

이후 웹 인터페이스를 통해 임의의 게시글을 수정하고 다음을 확인합니다:

cat /tmp/post_edited_test.log

latest-release +122에서의 결과: "Test started"만 표시됨 - 이벤트가 트리거되지 않음
구버전 빌드에서의 결과: 타임스탬프와 게시글 ID가 포함된 이벤트 항목이 표시됨

테스트 2: 리비전이 생성되는지 확인

post = Post.find(POST_ID)
puts "Post revisions: #{post.revisions.count}"
post.revisions.last(3).each { |rev| puts "  Revision #{rev.number}: #{rev.created_at}" }

결과: 리비전이 올바른 타임스탬프와 함께 정상적으로 생성됨
결론: 수정이 성공적으로 처리되지만, post_process_post가 호출되지 않거나 이벤트가 트리거되지 않음

테스트 3: 수동 이벤트 트리거 (이벤트 시스템이 작동함을 증명)

post = Post.find(POST_ID)
DiscourseEvent.trigger(:post_edited, post, false, PostRevisor.new(post))

결과: 이벤트 핸들러가 정상적으로 실행됨
결론: 이벤트 시스템은 작동하지만, 수정 시 자동 트리거가 손상됨


예상 동작

웹 인터페이스를 통해 게시글이 수정될 때:

  1. 수정이 성공적으로 저장됨 :white_check_mark:
  2. 게시글 리비전이 생성됨 :white_check_mark:
  3. PostRevisor#post_process_post가 호출됨 :cross_mark:
  4. :post_edited 이벤트가 트리거됨 :cross_mark:
  5. 이벤트 핸들러가 실행됨 :cross_mark:

1~2단계만 작동합니다. 3~5단계는 손상되었습니다.


실제 동작

프로덕션 로그에는 수정 완료 성공이 표시됩니다:

Started PUT "/posts/3631" for 88.97.179.124 at 2026-01-15 13:06:19 +0000
Processing by PostsController#update as JSON
Completed 200 OK in 676ms

오류나 예외는 없으나, :post_edited 이벤트가 발행되지 않습니다.

이벤트는 /var/www/discourse/lib/post_revisor.rb의 759번째 줄에서 트리거되어야 합니다:

def post_process_post
  @post.invalidate_oneboxes = true
  @post.trigger_post_process
  DiscourseEvent.trigger(:post_edited, @post, self.topic_changed?, self)
end

이 메서드는 341번째 줄에서 호출되지만 이벤트가 트리거되지 않습니다.


영향

영향받는 공식 기능

  • Discourse Automation: post_created_edited 트리거가 완전히 손상됨
  • 게시글 수정에 의존하는 모든 자동화 워크플로우가 조용히 실패함

영향받는 플러그인

:post_edited 이벤트를 청취하는 모든 플러그인이 손상되었습니다:

  • discourse-automation - 공식 자동화 트리거
  • discourse-ai - 수정된 게시글에 대한 AI 모더레이션
  • discourse-doc-categories - 문서 인덱스 업데이트
  • discourse-topic-voting - 표 재획득 워크플로우
  • 기타 커스텀 플러그인 - 게시글 수정 이벤트를 사용하는 플러그인

회귀 타임라인

  1. 구버전 빌드: v2026.1.0-latest - :post_edited 이벤트 정상 작동 :white_check_mark:
  2. 업데이트됨: latest-release (release +122) - :post_edited 이벤트 손상 :cross_mark:
  3. 확인됨: 두 개의 독립적인 프로덕션 환경 (업데이트 후 모두 손상)

이는 최근 latest-release 빌드에 회귀가 도입되었음을 명확하게 증명합니다.


우회 방법

Rails 콘솔을 통한 수동 트리거는 작동합니다:

automation = DiscourseAutomation::Automation.find(AUTOMATION_ID)
post = Post.find(POST_ID)
automation.trigger!({"post" => post})

이는 자동화 시스템 자체는 작동하며, 자동 이벤트 트리거만 손상되었음을 확인시켜 줍니다.


설정 관련 참고 사항

  • 설정 확인: 모든 수정 관련 설정이 표준/기본값임
  • 유예 기간: 유예 기간을 훨씬 벗어나는 시점의 수정을 테스트함 (영향 없음)
  • 플러그인: 50개의 플러그인 설치 (표준 공식 플러그인)
  • 코어 수정 없음: 깨끗한 Discourse 설치
  • 환경: 두 테스트 환경 모두 동일한 Azure AKS 배포

주요 증거

가장 중요한 발견:

구버전 빌드에서 정상 작동하던 DEV 환경이 있었습니다. latest-release +122로 업데이트한 후 자동화가 작동하지 않았습니다. 이는 최근 릴리스에 회귀가 도입되었음을 확실히 증명합니다.

두 환경은 현재 동일한 버전에서 동일한 손상된 동작을 나타냅니다.


재현 가능성

100% 재현 가능 - 두 개의 독립적인 환경에서 테스트:

  1. Discourse latest-release (release +122) 설치
  2. post_created_edited 트리거가 있는 자동화 생성
  3. 게시글 수정
  4. 자동화가 절대 트리거되지 않음을 관찰
  5. 테스트 리스너를 사용하여 :post_edited 이벤트가 절대 트리거되지 않음을 확인

요약

이것은 latest-release (release +122)의 확인된 회귀입니다. :post_edited 이벤트는 이전 버전에서 작동하다가 업데이트 후 작동이 중단되었습니다. 두 개의 독립적인 환경에서 동일한 동작을 확인했습니다. 이는 Discourse Automation의 핵심 기능과 게시글 수정 이벤트에 의존하는 모든 플러그인을 손상시킵니다.

DiscourseEvent는 그렇게 동작하지 않습니다. 프로세스 간(inter-process)이 아니라 프로세스 내(intra-process) 이벤트입니다. 따라서 이벤트는 이벤트를 트리거한 프로세스와 동일한 프로세스의 리스너에서만 포착됩니다.

discourse 자동화 기능의 경우, 다음과 같은 설정으로 로컬에서 직접 테스트해 보았습니다.

그리고 게시물을 수정해 보니 채팅 메시지가 성공적으로 전송되었습니다.

감사합니다! 분명히 오해한 부분이 있는 것 같으니 다시 한번 확인해 보겠습니다. 이 정보를 활용해서 플러그인을 정상적으로 작동시킬 수 있기를 바랍니다. 정말 감사합니다.

@zogstrip님, 감사합니다. 웹 인터페이스를 통해 편집하는 동안 프로덕션 로그를 관찰하여 테스트도 진행했습니다:

테스트 절차:

  1. 콘솔을 통해 자동화 쿨다운을 해제했습니다.
  2. 로그를 관찰했습니다: tail -f /var/www/discourse/log/production.log | grep "PDF Automation"
  3. 웹 브라우저를 통해 게시물을 편집했습니다 (자동화와 동일한 과정).
  4. 결과: 편집은 성공적으로 완료되었습니다(200 OK), 하지만 자동화는 여전히 트리거되지 않았습니다.

우리는 두 개의 동일한 환경(DEV와 PROD, Azure AKS)을 보유하고 있습니다:

  • 업데이트 전: DEV 환경의 자동화는 완벽하게 작동했습니다 (로그 파일에 항목이 표시됨).
  • latest-release(+122)로 업데이트 후: DEV와 PROD 모두에서 자동화가 작동하지 않게 되었습니다.
  • 웹 인터페이스를 통한 테스트: 여전히 자동화가 트리거되지 않습니다.

우리의 자동화 설정:

  • 트리거: post_created_edited
  • 스크립트: 커스텀 스크립터블(run_pdf_generation)
  • 필터: 카테고리 ID 34, 태그 “hd96-24”

자동화가 트리거되지 않도록 막고 있는 커스텀 스크립터블이나 우리 환경에 특정한 문제가 있을까요? 업데이트 전에 작동했다는 사실은 post_created_edited 트리거가 발동되는 방식이 변경되었음을 시사합니다.

동일한 트리거를 사용하는 좀 더 “간단한” 자동화로 시도해 볼 수 있을까요? /logs에서 관련이 있을 수 있는 내용이 있나요?

좋은 아이디어네요 - 문제를 재현할 수 있는 최소한의 예제를 만들어서 월요일에 보내드릴게요. 주말 잘 보내세요 :slight_smile:

DiscourseEvent의 프로세스 간 문제와 관련하여 말씀하신 내용이 정확했습니다. 명확하게 설명해 주셔서 감사합니다!

피드백을 주신 후, 동일한 post_created_edited 트리거를 사용하는 간단한 send_chat_message 자동화로 제대로 테스트를 진행했습니다. 게시물을 수정했을 때, 자동화가 실제로 트리거되었습니다(로그에서 처리 과정을 확인했으며, 500 에러는 트리거 자체의 문제가 아니라 채팅 설정 오류로 인해 발생했습니다).

이를 통해 다음이 확인되었습니다: post_created_edited 트리거는 정상적으로 작동하고 있습니다.

혼란은 다음과 같은 이유에서 비롯되었습니다:

  1. Rails 콘솔 리스너로 테스트를 진행한 것 (잘못된 접근 - 프로세스 간 문제)
  2. 커스텀 PDF 스크립터블이 재빌드 과정에서 사라져서 영구적으로 재등록하는 데 어려움을 겪었던 것

트리거 메커니즘 자체는 기대대로 작동하고 있습니다. 혼란을 드려 죄송하며, 도움을 주셔서 감사합니다!

모든 것이 예상대로 작동해서 다행입니다 :+1:

이제 진짜 어려운 부분입니다. 커스텀 run_pdf_generation 스크립트가 더 이상 작동하지 않는 원인을 찾아내는 것이죠 :sweat_smile: