Alle Benutzer außer Administratoren oder einigen ausgewählten Benutzern entfernen, je nachdem, was einfacher ist

Gibt es ein schnelles Skript, mit dem ich alle Benutzer außer Administratoren oder einer ausgewählten Gruppe von Benutzern, die anhand ihrer IDs/E-Mails identifiziert wurden, in großen Mengen entfernen kann? Welche Option einfacher ist, ist in Ordnung.

Ich möchte dies von der Rails-Konsole aus tun.

Danke

 User.where(admin: false).destroy_all

Ich denke, das sollte es tun. Sie können das obige ohne destroy_all ausführen, um zu sehen, welche Benutzer ausgewählt werden.

2 „Gefällt mir“

Danke, ist destroy_all dasselbe wie UserDestroyer oder wird eines von beiden empfohlen? Habe UserDestroyer ein paar Mal in anderen Beiträgen gesehen. Danke

Es schlägt jetzt mit diesem fehl, nachdem es etwa 200 gelöscht hat, aber es hängt jetzt fest:

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'

Ich habe gesucht und einen Beitrag gefunden, in dem es darum ging, blockierte E-Mails unter Admin > Logs > Screened Emails zu überprüfen, und es wird nichts angezeigt, aber ich bin mir nicht sicher, was ich als nächstes tun soll. Danke.

UserDestroyer sollten Sie verwenden. Damit werden andere Daten gelöscht, die mit dem Benutzer verknüpft sind.

Ich weiß nicht, warum Sie diesen Fehler erhalten.

Sie könnten Ihr Backup wiederherstellen, bevor Sie mit dem Löschen begonnen haben, und stattdessen den Destroyer ausprobieren.

1 „Gefällt mir“

Ich habe es wiederhergestellt und es erneut mit dem UserDestroyer versucht, aber ich bekomme immer noch diesen Fehler. Gibt es eine Möglichkeit, herauszufinden, was ihn verursacht?

Sie können ein Rails-Skript oder den Data Explorer verwenden, um die E-Mail-Adressen zu überprüfen und zu sehen, ob eine leer ist… Obwohl das seltsam wäre. Kein E-Mail-Feld ist standardmäßig leer, selbst für automatisch generierte Konten wie discobot oder system (die standardmäßig Administratoren sind).

Wurden Ihre Benutzer importiert? Aber selbst dann bin ich mir ziemlich sicher, dass die Erstellungsmethoden für Konten keine leeren E-Mail-Felder zulassen.

Wir haben OAuth mit einer benutzerdefinierten App verwendet. Ich habe das gestern gemacht, aber es wurden keine Benutzer zurückgegeben:

User.joins(:user_emails).where(user_emails.email = \"\") und das gab nil zurück, also glaube ich nicht, dass welche leer sind.

Es müssen aber nur ein oder zwei Benutzer sein, da die Mehrheit funktioniert, aber es bleibt jetzt sofort beim selben hängen.

Mein Löschskript lautet:

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

Gibt es eine Möglichkeit, auszugeben, welchen Benutzer es in der Schleife verarbeitet?

Sie können die Benutzernamen und ihre entsprechenden E-Mails ausgeben:

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 „Gefällt mir“

Danke, das ist großartig, ich werde das jetzt ausführen und hoffentlich wird mir angezeigt, wer damit Schwierigkeiten hat.

1 „Gefällt mir“

Ja, das hat funktioniert, es hat mir gezeigt, womit es Schwierigkeiten hatte, und es war irgendwie ein ungültiges Zeichen in der E-Mail, also habe ich das aktualisiert und es hat funktioniert. Danke

3 „Gefällt mir“

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