다음과 같은 상황을 확인했습니다:
- 사용자가 주제를 생성합니다.
- 사용자가 주제 게시글을 삭제하고, 삭제를 예약합니다. (저는
delete_removed_posts_after사이트 설정을1로 변경했습니다) - 지정된 시간이 지난 후 주제가 삭제됩니다.
- 스태프가 주제를 삭제 해제하고 게시글을 원래 버전으로 되돌립니다. (복원만 수행하면 게시글이 "저자가 주제를 철회했으며, 신고되지 않는 한 1시간 후 자동으로 삭제됩니다"라는 메시지와 함께 복원됩니다)
- 일정 시간이 지난 후 주제가 다시 삭제됩니다.
현재 발생하고 있는 상황: 사용자가 자신의 주제 게시글을 삭제하면 user_deleted라는 속성이 true로 설정됩니다. 30분마다 실행되는 DestroyOldDeletionStubs라는 백그라운드 작업이 있습니다. 이 작업은 PostDestroyer.destroy_stubs 함수를 실행하여 데이터베이스를 검색하고, user_deleted가 true로 설정되어 있고 "삭제 타이머"가 만료된 게시글을 삭제합니다.
문제점: 스태프가 게시글을 복원할 때 user_deleted가 false로 설정되지 않습니다. 따라서 DestroyOldDeletionStubs가 다음에 실행될 때 게시글이 다시 삭제됩니다.
해결책: staff_recovered 함수에 user_deleted를 false로 설정하는 로직을 추가해야 할 것으로 확신합니다. (user_recovered 함수는 이미 이 작업을 수행합니다) discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub 를 참조하세요.
즉시 해결 방법: 주제 게시글을 복원하고 해당 게시글 ID를 확인한 후, rails 콘솔에서 다음을 실행하세요:
Post.find_by_id(POST_ID).update(user_deleted: false)
게시글 ID는 주제 URL 끝에 .json을 붙여 쉽게 찾을 수 있습니다. 예를 들어 이 주제를 사용하면: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. 이 경우 주제 게시글 ID는 632362입니다.