Mentre si tenta di eliminare argomenti creati da un utente specifico dal pannello di amministrazione → utenti. Mi viene mostrato un errore 502.
Esiste un altro modo per eliminare argomenti creati da un utente specifico?
Mentre si tenta di eliminare argomenti creati da un utente specifico dal pannello di amministrazione → utenti. Mi viene mostrato un errore 502.
Esiste un altro modo per eliminare argomenti creati da un utente specifico?
Ciao @Yogesh_g,
Stai cercando di eliminare tutti i 301.719 post creati da questo utente?
Sembra che ti rimarranno molti argomenti che non avranno senso a causa dei post mancanti.
L’anonimizzazione dell’utente avrebbe senso per te in questa situazione?
Penso che tu stia ricevendo questo errore 502 a causa dell’impostazione “elimina tutti i post max”.
Ho aumentato il limite a un numero maggiore di quello che voglio eliminare e questi argomenti contengono solo post dello stesso utente.
Puoi spiegare come funziona l’anonimizzazione degli utenti, renderebbe tutti i post nascosti a tutti gli altri utenti?
C’è un modo per accedere al database che sto usando per l’hosting di discourse?
No, non nasconde i post; rimuove il nome utente. È una buona soluzione a volte quando l’utente chiede di eliminare il proprio account, perché preserva il contenuto, mantenendo intatti gli argomenti nella tua community, rendendo al contempo quel contenuto anonimo, in modo che nessuno sappia chi l’ha scritto. È descritto completamente qui:
Se hai un sito ospitato, potrebbe essere meglio lasciare che il team di Discourse ti assista.
Questa è una situazione piuttosto unica e un’enorme quantità di lavoro sul [database] - non c’è da stupirsi che la richiesta vada in timeout.
Sembra molto eccezionale; consiglierei anche di contattare il supporto di hosting per assistenza con questo.
Ok, contatterò il supporto. E vi aggiornerò qui.
C’è un altro modo per eliminare tutti i post per un utente. Oppure posso provare a creare un plugin personalizzato per eliminare i post dal database. (Il mio cliente lo sta chiedendo, ma non sono sicuro che funzionerà per un gran numero di post, dato che Discourse ha già questa funzionalità).
Dovrei creare un plugin per questo o no. E se sì, come funzionerà?
@ Michael Brown @southpaw Ho creato un plugin per eliminare i post di un utente in batch di un dato numero. Ho scritto del codice Ruby per eliminare i post. Attualmente sto usando l’API delle impostazioni per ricevere input dall’amministratore.
La sfida che sto affrontando è questa. Voglio creare una pagina di amministrazione per il plugin che abbia alcuni campi di input e un pulsante. Voglio che il mio codice Ruby venga eseguito al clic di quel pulsante.
Ho provato alcuni modi ma ho fallito.
Ho bisogno di aiuto, c’è un modo possibile per ottenerlo in discourse?
Ciao @Yogesh_g,
![]()
Non ho (ancora!) esperienza nella scrittura di plugin, quindi non ho una risposta rapida per te sulle domande che hai posto riguardo al funzionamento della tua pagina di amministrazione, ma vorrei assicurarmi che tu riceva l’aiuto di cui hai bisogno.
Ho qualche difficoltà a mettere insieme tutti i pezzi qui, quindi ti ho inviato un messaggio privato per ottenere maggiori dettagli.
Continuato su How to execute server-side code when clicking a button?
Ciao, community di discourse @pfaffman @merefield
Ho bisogno di eliminare tutti i post creati da un particolare utente (un totale di 301.719 post). Ho provato vari modi, ma non sono riuscito a eliminarli.
Come dovrei eliminare tutti i post di quell’utente? Per favore, forniscimi un modo. Sto lottando con questo da 3 mesi.
intendi eliminazione permanente o eliminazione temporanea?
eliminazione permanente. Non voglio che questi post vengano mostrati ad alcun utente.
Questo argomento ti è utile?
Non penso sia esattamente quello che stai cercando, ma potresti essere in grado di modificarlo per raggiungere ciò di cui hai bisogno?
Questo non funziona. Ci ho provato prima.
Ho avuto un problema simile prima, ho dovuto eliminare circa 200000 post da diversi utenti con molte condizioni. Qualsiasi metodo ordinario porterebbe a un ritardo a lungo termine.
Alla fine ho preso la strada più stupida. Ciclo da 1 all’ID del post massimo. Se soddisfa la condizione, eliminalo. Mi ci è voluta circa un’ora per analizzarli (circa 900000 post).
Ho provato un modo simile, il server restituisce un errore di timeout, ecco il codice
# frozen_string_literal: true
module Jobs
class DeleteUserPosts < ::Jobs::Scheduled
every 2.minutes
def execute(args)
return unless SiteSetting.delete_user_topics_enabled?
username = SiteSetting.delete_posts_for_username
posts_per_batch = SiteSetting.delete_posts_in_single_batch.to_i
return unless username.present? && posts_per_batch.positive?
user = User.find_by(username: username)
return unless user.present?
posts = user.posts.order(created_at: :asc)
deleted_count = 0
posts.each do |post|
break if deleted_count >= posts_per_batch
if SiteSetting.delete_user_topics_dry_run?
Rails.logger.error("DeleteUserPosts rimuoverebbe il Post ID #{post.id} (#{post.topic.title} - #{post.excerpt}) (modalità dry run)")
else
Rails.logger.error("DeleteUserPosts rimuove il Post ID #{post.id} (#{post.topic.title} - #{post.excerpt})")
begin
PostDestroyer.new(Discourse.system_user, post).destroy
deleted_count += 1
rescue StandardError => e
Rails.logger.error("Errore durante l'eliminazione del post ID #{post.id}: #{e.message}")
end
end
end
# Annulla il job pianificato se non ci sono più post rimanenti
if posts.size <= posts_per_batch
self.class.cancel_scheduled_job
end
end
end
end
Ovviamente, questo può andare storto. 300.000 post non sono un numero esiguo, non puoi caricarli tutti in memoria contemporaneamente.
Puoi per favore condividere lo snippet di codice che hai usato, o mostrare un esempio