管理ユーザーまたは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'
検索したところ、管理者 > ログ > スクリーンされたメールでブロックされたメールを確認するという投稿が1件ありましたが、何も表示されません。次に何をすべきかわかりません。ありがとうございます。
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
ありがとうございます。これは素晴らしいです。今すぐ実行して、誰が苦労しているのかがわかることを願っています。
はい、これでうまくいきました。どの部分で問題が発生していたかを示してくれて、メールに不正な文字が混入していたことがわかりました。それを更新したところ、正常に動作しました。ありがとうございます。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.