Rimuovere tutti gli utenti tranne gli amministratori o alcuni utenti selezionati, a seconda di cosa è più facile

Esiste uno script rapido che mi permetta di rimuovere in massa tutti gli utenti tranne gli amministratori o pochi utenti selezionati identificati dai loro ID/email? Qualsiasi opzione sia più semplice va bene.

Vorrei farlo dalla console di Rails.

Grazie.

 User.where(admin: false).destroy_all

Penso che dovrebbe funzionare. Puoi eseguire quanto sopra senza destroy_all per vedere quali utenti vengono selezionati.

2 Mi Piace

Grazie, destroy_all è uguale a UserDestroyer o uno è consigliato rispetto all’altro? Ho visto UserDestroyer menzionato un paio di volte in altri post. Grazie

Ora sta fallendo con questo dopo averne eliminati circa 200, ma ora è bloccato:

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'

Ho cercato e trovato un post sulla verifica delle email bloccate in Admin > Logs > Screened Emails e non viene visualizzato nulla, ma non sono sicuro di cosa fare dopo. Grazie.

Dovresti usare UserDestroyer. Eliminerà altri dati associati all’utente.

Non so perché hai ricevuto quell’errore.

Potresti ripristinare il tuo backup a prima di iniziare l’eliminazione e provare invece il destroyer.

1 Mi Piace

Ho ripristinato e riprovato con UserDestroyer, ma continuo a ricevere quell’errore. C’è un modo per rintracciare cosa lo sta causando?

Puoi usare uno script rails o Data Explorer per controllare gli indirizzi email e vedere se uno è vuoto… Anche se sarebbe strano. Nessun campo email è vuoto per impostazione predefinita, nemmeno per gli account generati automaticamente come discobot o system (che sono amministratori per impostazione predefinita).

I tuoi utenti sono stati importati? Ma anche in quel caso, sono abbastanza sicuro che i metodi di creazione dell’account non consentano campi email vuoti.

Abbiamo utilizzato OAuth con un’app personalizzata. L’ho fatto ieri ma non ha restituito utenti:

User.joins(:user_emails).where(user_emails.email = "") e questo ha restituito nil, quindi non credo che ce ne siano di vuoti.

Devono essere solo uno o due utenti, perché la maggior parte funziona, ma ora si blocca istantaneamente sullo stesso.

Il mio script di eliminazione è:

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

C’è un modo per visualizzare quale utente sta elaborando durante il ciclo?

Puoi visualizzare i nomi utente e le relative email:

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 Mi Piace

Grazie, questo è fantastico, lo eseguirò ora e spero che mi dica chi sta avendo difficoltà.

1 Mi Piace

Sì, ha funzionato, mi ha mostrato con cosa stava lottando ed era un carattere illegale nell’email in qualche modo, quindi l’ho aggiornato e ha funzionato. Grazie

3 Mi Piace

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