안녕하세요,
20년 된 포럼을 Discourse로 가져왔습니다.
사용하지 않거나 스팸인 계정과 스팸 메시지가 많이 있습니다.
정리를 하고 싶습니다.
모든 사용자의 신뢰 수준을 0으로 설정했습니다.
아래 데이터 탐색 쿼리를 사용하여 메시지를 한 번도 작성하지 않은 사용자의 수를 확인해 보았습니다:
SELECT COUNT (DISTINCT user_id) from posts
28,530명이 계산되었습니다.
총 사용자 수를 확인해 보았습니다:
SELECT COUNT (DISTINCT id) FROM users
180,000명이 계산되었습니다 (vBulletin 통계에 따르면 실제로 180,000개의 계정이 있었던 것으로 확인됩니다).
CleanUpInactiveUsers Sidekiq 작업을 실행했습니다.
몇백 명만 삭제되었습니다. 사용하지 않는 프로필 중 하나를 확인해 보니 활동이 전혀 없었습니다: 게시글도, 주제도 없었습니다. 그러나 vBulletin에서 모든 사용자를 가져온 후 Discobot이 그들에게 메시지를 보낸 적이 있었습니다. 5일 전이었습니다.
그래서 Discourse 설정에서 clean up inactive users after days(비활성 사용자 정리까지 대기일)을 1로 설정했습니다.
다시 CleanUpInactiveUsers Sidekiq 작업을 실행했습니다.
약 1,000명의 사용자가 삭제되었습니다.
아직 178,000명의 사용자가 남아 있고, 그중 대부분은 메시지가 없는 비어 있고 사용하지 않는 프로필이라는 것을 알고 있습니다.
왜 CleanUpInactiveUsers에 의해 삭제되지 않는지 아이디어가 있을까요?
또한 스팸 계정과 메시지가 많기 때문에, 기존 사용자와 메시지에 대해 스팸 감지를 실행하고 그것도 모두 정리할 수 있을까요?
조금 실험해봐야 할 수 있지만, 가능합니다. 시작점으로 다음과 같은 코드가 작동할 수 있습니다:
User.find_each do |user|
untitled_topic_count = user.topics.where(title: "").count
titled_topic_count = user.topics.where.not(title: "").count
if untitled_topic_count > 0 && titled_topic_count == 0
# delete the topics and/or the user
end
end