管理者または選択したユーザー以外の全ユーザーを削除する

管理ユーザーまたはID/メールアドレスで指定された少数のユーザーを除き、すべてのユーザーを一括削除できる簡単なスクリプトはありますか?どちらのオプションでも構いません。

Railsコンソールから実行したいです。

よろしくお願いします。

User.where(admin: false).destroy_all

これで完了するはずです。destroy_allなしで上記を実行すると、どのユーザーが選択されるかを確認できます。

「いいね!」 2

destroy_allUserDestroyer と同じですか、それともどちらか一方が推奨されますか。他の投稿で 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'

検索したところ、管理者 > ログ > スクリーンされたメールでブロックされたメールを確認するという投稿が1件ありましたが、何も表示されません。次に何をすべきかわかりません。ありがとうございます。

UserDestroyer を使用してください。ユーザーに関連付けられた他のデータも削除されます。

なぜそのエラーが発生したのか分かりません。

削除を開始する前のバックアップを復元し、代わりに destroyer を試してください。

「いいね!」 1

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
「いいね!」 3

ありがとうございます。これは素晴らしいです。今すぐ実行して、誰が苦労しているのかがわかることを願っています。

「いいね!」 1

はい、これでうまくいきました。どの部分で問題が発生していたかを示してくれて、メールに不正な文字が混入していたことがわかりました。それを更新したところ、正常に動作しました。ありがとうございます。

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.