Supprimer tous les utilisateurs sauf les administrateurs ou quelques utilisateurs sélectionnés, selon ce qui est le plus facile

Existe-t-il un script rapide qui me permettrait de supprimer en masse tous les utilisateurs à l’exception des administrateurs ou de quelques utilisateurs sélectionnés identifiés par leurs identifiants/e-mails ? L’option la plus simple est la bienvenue.

Je souhaite faire cela depuis la console Rails.

Merci.

 User.where(admin: false).destroy_all

Je pense que cela devrait fonctionner. Vous pouvez exécuter ce qui précède sans le destroy_all pour voir quels utilisateurs sont sélectionnés.

2 « J'aime »

Merci, destroy_all est-il identique à UserDestroyer ou l’un est-il recommandé par rapport à l’autre. J’ai vu UserDestroyer mentionné plusieurs fois dans d’autres publications. Merci.

Il échoue maintenant avec ceci après en avoir supprimé environ 200, mais il est maintenant bloqué :

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'

J’ai cherché et trouvé un message concernant la vérification des e-mails bloqués dans Admin > Logs > Screened Emails et rien ne s’affiche, mais je ne sais pas quoi faire ensuite. Merci.

UserDestroyer est ce que vous devriez utiliser. Il supprimera les autres données associées à l’utilisateur.

Je ne sais pas pourquoi vous avez obtenu cette erreur.

Vous pourriez restaurer votre sauvegarde à avant que vous commenciez la suppression et essayer le destructeur à la place.

1 « J'aime »

J’ai restauré et réessayé avec le UserDestroyer, mais j’obtiens toujours cette erreur. Y a-t-il un moyen de savoir ce qui la cause ?

Vous pouvez utiliser un script Rails ou Data Explorer pour vérifier les adresses e-mail et voir si l’une d’elles est vide… Bien que ce serait étrange. Aucun champ d’e-mail n’est vide par défaut, même pour les comptes générés automatiquement comme discobot ou system (qui sont administrateurs par défaut).

Vos utilisateurs ont-ils été importés ? Mais même dans ce cas, je suis à peu près sûr que les méthodes de création de compte ne permettent pas de champs d’e-mail vides.

Nous avons utilisé oauth avec une application personnalisée. Je l’ai fait hier mais cela n’a retourné aucun utilisateur :

User.joins(:user_emails).where(user_emails.email = \"\") et cela a retourné nil, donc je ne pense pas qu’il y en ait de vides.

Il ne doit y avoir qu’un ou deux utilisateurs car la majorité fonctionne, mais cela bloque instantanément sur le même maintenant.

Mon script de suppression est :

User.where(admin: false).find_each do |user| UserDestroyer.new(Discourse.system_user).destroy(user, delete_posts: true) end

Y a-t-il un moyen d’afficher quel utilisateur il traite pendant la boucle ?

Vous pouvez afficher les noms d’utilisateur et leurs e-mails correspondants :

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 « J'aime »

Merci, c’est super, je vais exécuter ça maintenant et j’espère que cela me dira qui pose problème.

1 « J'aime »

Oui, cela a fonctionné, cela m’a montré ce qui posait problème et c’était un caractère illégal dans l’e-mail, donc je l’ai mis à jour et cela a fonctionné. Merci.

3 « J'aime »

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