관리자나 ID/이메일로 식별된 소수의 사용자를 제외하고 모든 사용자를 일괄 삭제할 수 있는 간단한 스크립트가 있을까요? 더 쉬운 방식을 선택하면 됩니다.
이를 Rails 콘솔에서 실행할 예정입니다.
감사합니다.
관리자나 ID/이메일로 식별된 소수의 사용자를 제외하고 모든 사용자를 일괄 삭제할 수 있는 간단한 스크립트가 있을까요? 더 쉬운 방식을 선택하면 됩니다.
이를 Rails 콘솔에서 실행할 예정입니다.
감사합니다.
User.where(admin: false).destroy_all
이렇게 해야 한다고 생각합니다. destroy_all 없이 위 코드를 실행하면 어떤 사용자들이 선택되는지 확인할 수 있습니다.
감사합니다. destroy_all과 UserDestroyer가 동일한 건가요, 아니면 둘 중 하나가 더 권장되나요? 다른 게시글에서 UserDestroyer가 몇 번 언급된 걸 봤거든요. 감사합니다.
약 200개를 삭제한 후 이제 다음과 같은 오류가 발생하고 있으며, 현재 멈춰 있는 상태입니다:
ActiveRecord::RecordInvalid: Validation failed: Primary email can't be blank
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/validations.rb:80:in `raise_validation_error'
검색을 해본 결과, 관리자 > 로그 > 차단된 이메일에서 차단된 이메일을 확인하라는 게시물을 하나 찾았지만, 아무것도 표시되지 않고 있으며 다음 단계가 무엇인지 확신이 서지 않습니다. 감사합니다.
UserDestroyer를 사용해야 합니다. 이 명령은 해당 사용자와 관련된 다른 데이터도 삭제합니다.
해당 오류가 발생하는 이유는 알 수 없습니다.
삭제를 시작하기 전으로 백업을 복원한 후, 대신 destroyer를 시도해 보세요.
UserDestroyer를 복구해서 다시 시도해 봤는데, 여전히 그 오류가 나요. 원인을 추적하는 방법이 있을까요?
Rails 스크립트나 Data Explorer를 사용하여 이메일 주소를 확인하고 빈 값이 있는지 살펴볼 수 있습니다… 하지만 그렇게 될 가능성은 낮습니다. discobot이나 system과 같은 자동 생성된 계정(기본적으로 관리자 권한을 가짐)을 포함하여, 기본적으로 이메일 필드가 비어 있는 경우는 없습니다.
사용자를 가져온 적이 있나요? 하지만 그렇더라도, 계정 생성 방식이 빈 이메일 필드를 허용하지 않는다고 확신합니다.
우리는 커스텀 앱을 사용하여 oauth를 사용했습니다. 어제 이 작업을 수행했지만 사용자가 반환되지 않았습니다:
User.joins(:user_emails).where(user_emails.email = "")를 실행했는데 nil이 반환되었으므로 빈 이메일 주소가 있는 사용자는 없는 것 같습니다.
대부분의 사용자는 정상적으로 작동하지만, 지금은 동일한 사용자 한 명에서 즉시 막히는 것 같습니다. 아마도 1~2명의 사용자 문제일 것입니다.
제 삭제 스크립트는 다음과 같습니다:
User.where(admin: false).find_each do |user| UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true) end
루프를 돌면서 현재 처리 중인 사용자를 출력할 방법이 있을까요?
사용자 이름과 해당 이메일을 출력할 수 있습니다:
User.where(admin: false).find_each do |user|
puts "#{user.username}: #{user.email}"
UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true)
end
감사합니다, 정말 좋습니다. 이제 실행해 보겠습니다. 어떤 부분에서 문제가 발생하는지 확인될 수 있기를 바랍니다.
네, 잘 작동했어요. 어떤 부분에서 문제가 있었는지 알려주었고, 이메일에 불법 문자가 들어있던 거였어요. 그 부분을 수정하니 정상적으로 작동했습니다. 감사합니다.