Scusa se è una domanda stupida… Perché con Discourse non è possibile eliminare facilmente i messaggi dal database?
Discourse utilizza un meccanismo chiamato ‘soft delete’ che rende facile correggere gli errori. Permette inoltre di distinguere tra ‘eliminato per gli altri utenti’ e ‘eliminato per gli amministratori’.
Mantiene anche l’integrità del database. Cosa succede se un post eliminato era stato citato (prima della sua eliminazione)? In tal caso, il post che contiene la citazione avrebbe un riferimento a un post che non esiste più. Questo potrebbe portare a ogni sorta di errori.
Grazie, ora ho capito… l’unico problema è se ci sono molti messaggi cancellati.
È stato discusso e richiesto in precedenza, più di una volta, ad esempio:
Sebbene comprenda che l’eliminazione soft possa essere utile, dopo un certo periodo (ad esempio una settimana o un mese) sarebbe piacevole che i contenuti eliminati venissero effettivamente rimossi per risparmiare spazio e garantire anche la conformità legale, ad esempio perché è stato pubblicato qualcosa di illegale o perché è necessario rimuovere dati personali per la conformità al GDPR.
Dover accedere ed eseguire un task rake per sostituire il messaggio con ‘questo è stato eliminato’ è un po’ macchinoso.
Ops… scusa, venendo da phpBB pensavo fosse possibile farlo.
È stato implementato
Cordiali saluti,
Ma come lo facciamo???
Ci ho giocato stamattina, ma non riesco a capirlo.
Qualche suggerimento?
Beh, l’impostazione va configurata in Admin > Impostazioni > Sicurezza (attualmente nascosta per qualche motivo) e poi ogni amministratore deve ottenerne l’assegnazione come moderatore.
Una volta concessa, apparirà nel menu di amministrazione dei post.
Ah, potrebbe essere il mio punto debole. Stavo cercando can_permanently_delete nelle impostazioni di amministrazione e non sono riuscito a vederlo.
L’impostazione del sito è nascosta perché non ne incoraggiamo l’uso. È stata sviluppata per i casi in cui sono state pubblicate informazioni sensibili e devono essere rimosse completamente dal database. Un’altra cosa: questa operazione non è comunque un’operazione in blocco.
Poiché si tratta di un’impostazione del sito nascosta, l’unico modo per abilitarla è tramite la console.
Questo è esattamente quello di cui ho bisogno! Grazie.
Come imposterei la sintassi in modo che riguardi solo tutti i post eliminati prima del xxxx?
Quello sarebbe Post.with_deleted.where("deleted_at < 'YYYY-mm-dd'").update_all(...)
Puoi dirci come attivarlo dalla console?
Ecco le istruzioni:
Funzione abilitata dalla console, ma come posso eliminare i post cancellati? Tutti i post sono presenti nei post cancellati.
Non sono davvero un esperto in materia, ma sembra che ci siano abbastanza frammenti di informazioni in questo argomento per creare il codice che stai cercando.
L’argomento che ho collegato all’inizio contiene gli avvertimenti dei creatori sul fatto che si tratta di un territorio inesplorato e che lo fai a tuo rischio e pericolo. Tuttavia, forniscono anche il componente ‘destroy_all’, che sembra utile, e suggeriscono di iniziare con batch.
Quell’argomento include anche alcuni esempi su come mirare a post o argomenti, che (uniti agli esempi forniti da @RGJ su come colpire post specifici diversi) dovrebbero portarti molto vicino all’obiettivo.
Non ho però esperienza in questo, quindi temo di non poterti dare il via libera, dato che non l’ho mai fatto. ![]()
Per eliminare i vecchi post del nostro forum, ho utilizzato questo metodo, che combina le indicazioni di The proper way to completely delete hundred of topics via rails? con i suggerimenti di @RGJ.
Ho scelto di procedere in questo modo perché volevo davvero rimuovere i dati dal database per proteggere la privacy degli utenti. Sostituire il testo con “Questo post è stato eliminato” avrebbe lasciato intatto lo storico delle modifiche, rendendolo ancora relativamente accessibile, quindi non era sufficiente.
Visto che dovevamo eliminare 20.000 argomenti, ci è voluto un po’ di tempo!
Topic.with_deleted.where("deleted_at < '2021-08-28'").limit(1000).destroy_all
Poiché questo ha lasciato molti post orfani, ho dovuto procedere con:
Post.where('topic_id not in (select id from topics)').limit(1000).destroy_all
Immagino che il tuo ./launcher cleanup abbia anche liberato un po’ di spazio dopo ![]()
Purtroppo, nonostante l’esecuzione corretta, la tabella posts è ancora piena di post orfani. La tabella topics è stata pulita correttamente. I post non sono accessibili quando provo a visitarli tramite /t/topic_id, ma ciò è probabilmente dovuto all’assenza di un ID Topic valido. Non capisco del tutto perché siano ancora presenti nella tabella.
Qualcuno può suggerire un modo migliore per pulire la tabella posts?