자신의 설치 환경에서 discourse API를 호출하는 작은 앱을 작성했습니다. 이 앱은 일괄 처리 대신 각 게시물을 개별적으로 삭제합니다. 따라서 700개의 게시물이 있으면 700번의 API 호출이 이루어집니다. 가장 효율적인 방법은 아니었지만 도움이 되었습니다.
현재 20개의 문제 있는 게시물이 있는 것을 확인했습니다. “모두 삭제” 기능이 이 중 하나에 도달하면 멈추고 삭제할 수 없는 것 같습니다. API도 어떤 이유로 인해 이 게시물들을 삭제하지 못했습니다. 이제 대부분은 게시물을 직접 들어가서 일반 관리자처럼 삭제 버튼을 눌러 수동으로 삭제했습니다.
아직 약 5개는 API를 통해서든, 일반 방법으로든 삭제할 수 없습니다. 이 게시물들 사이에 공통점을 찾지 못했습니다. 어떤 것은 거대한 주제 안에 있고, 어떤 것은 작은 주제 안에 있습니다. 어떤 것은 답변이고, 좋아요가 있거나 이미지가 있는 반면, 그렇지 않은 것도 있습니다. 표준 UI를 통해 삭제하려고 하면 다음과 같은 오류 대화상자가 표시됩니다:
문제가 있는 5개의 게시글은 모두 두 개의 대형 주제 안에 있습니다. 최근 이 두 주제는 규모가 너무 커져서 모두 닫았습니다. 한 주제는 55,000개의 게시글, 다른 주제는 17,000개의 게시글을 보유하고 있습니다. 이렇게 큰 주제에서 게시글이 삭제될 때 상당한 처리 과정이 일어나고, 이로 인해 어떤 종류의 타임아웃이 발생하는 것 같습니다. 하지만 이것은 추측일 뿐입니다.
일반적으로 Discourse의 게시글은 하드 삭제(hard-delete)가 아니라 소프트 삭제(soft-delete) 처리됩니다. destroy 명령을 사용하면 데이터베이스에서 해당 게시글이 완전히 삭제되며, 제가 이 명령을 사용하도록 한 이유는 삭제하려는 게시글이 매우 긴 주제(topic)에 속해 있었기 때문입니다.
게시글이든 주제이든 이 방법을 사용하는 것을 권장하지 않습니다. 이 방식으로 삭제된 내용은 복구할 수 없으며, 제 이해에 따르면 현재 운영 중인 사이트의 데이터베이스를 다루고 있으므로, 문제가 발생할 경우 사이트 전체가 손상될 위험이 있습니다. 그럼에도 불구하고 destroy 명령을 사용하려는 경우, 그렇게 하셔도 무방합니다. 이 유형의 명령을 사용할 계획이라면 항상 백업을 수행해야 합니다.
감사합니다. 최대 토픽 수 한도를 2,500으로 변경했습니다. 얼마 전부터 사용자들 사이에서 한도를 없애달라는 요구가 이어졌고, 이로 인해 초대형 토픽들이 생겨났습니다. 하지만 초대형 토픽은 포럼에 좋지 않습니다. 많은 사람이 동시에 답글을 남기는 피크 시간대에 서버 성능이 크게 저하되었기 때문입니다. 이런 상황을 막기 위해 해당 토픽을 닫았지만, 여전히 다른 문제를 일으키는 거대한 토픽들이 남아 있는 상태입니다.