Dies ist mein allererstes benutzerdefiniertes Ruby-Skript.
In fast 50 Jahren Programmierung mit über 20 Sprachen und Dialekten musste (oder wollte
) ich noch nie in Ruby schreiben, aber OK, du hast mich erwischt … bitte sei sanft. ![]()
Mein Ziel ist es, Benutzerkonten zu identifizieren, die nicht per E-Mail-Link authentifiziert wurden, und die Konten zu sperren, damit ich sie vor der Löschung überprüfen kann. Während der Ersteinrichtung hatte ich Einstellungen in verschiedenen Entwicklungsstadien. Die 2FA-E-Mails wurden für einige Registrierungen nicht versendet, und es gab viele fehlerhafte Registrierungen, die ich jetzt herausfiltern möchte.
Version 0.0.1
rails c
# Stellen Sie zunächst sicher, dass die Benutzer-TLs den neuesten Definitionen entsprechen
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Vorbereitung für die Schleife
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# temporäres Datum, Benutzer werden vor diesem Datum entfernt
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Inactive'
# Potenziell tote Konten identifizieren
User.where("views = 0 OR approved = FALSE OR last_seen_at IS NULL")
.where("id > 0")
.find_each do |user|
user.suspended_till = suspend_till
user.suspended_at = suspend_at
user.change_trust_level!(TrustLevel[0])
# den Benutzer speichern, die Aktion protokollieren und ... das tun, was für diesen Auslöser getan wird
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# den Mailserver nicht missbrauchen
sleep(10)
end
Durch das Auslösen des Ereignisses möchte ich, dass E-Mails an die Benutzer gesendet werden - es wird eine Menge Bounces geben, und es wird vielleicht ein paar Leute geben, die zurückkommen, um sich zu authentifizieren. Nach einer Woche werde ich alle noch gesperrten Konten auswählen und löschen.
Fragen:
- Wird dies im Allgemeinen das tun, was beabsichtigt ist?
- Gibt es einen besseren Ansatz?
- Ist die Protokollierung redundant mit dem Ereignisauslöser?
- Können wir das mit JavaScript machen?
- Sollte ich das in eine andere Kategorie posten?
- Gibt es weitere Ratschläge?
Danke!!