Re-importazione di e-mail già importate

Ho installato con successo Discourse utilizzando il servizio cloud di Digital Ocean con l’intenzione di migrare alcune mailing list di listserv se Discourse si dimostrerà in grado di fare tutto ciò di cui abbiamo bisogno. Durante il test, ho utilizzato Thunderbird su Windows 10 per salvare le nuove e-mail che arrivano dalla mailing list ogni pochi giorni in una cartella su Windows, che poi copio nella cartella /var/discourse/shared/standalone/import/data/ExampleCategory1 (o ExampleCategory2) usando FileZilla. Successivamente avvio l’importazione docker ed eseguo import_mbox.sh. Finora tutto ha funzionato bene e posso replicare manualmente ciò che è arrivato tramite le mailing list a cui sono iscritto.

Tuttavia, immagina di avere ExampleCategory1 e ExampleCategory2 come categorie e di mettere per errore le e-mail destinate alla prima cartella, ExampleCategory1, nella seconda, ExampleCategory2, quindi eseguire l’importazione prima di accorgermene. (Il drag and drop è andato storto su FileZilla!)

Ora ho le e-mail di una mailing list nella categoria di un’altra, per errore.

Per risolvere questo problema, ho eliminato tutti gli argomenti/post in ExampleCategory2 utilizzando l’interfaccia web, e anche usando il comando rake destroy:topics[“ExampleCategory2”] per sicurezza, con l’intenzione di rieseguire semplicemente import_mbox.sh (ho copie di tutte le e-mail che dovrebbero essere in ogni categoria). Tuttavia, Discourse sembra ricordare quali e-mail ha importato, anche se i post sono stati eliminati, e quindi non le importerà di nuovo!

Come posso fare?

Il log delle e-mail ricevute nella sezione delle impostazioni di amministrazione mostra ancora le e-mail in arrivo che hanno creato i post ora eliminati, ma non c’è un collegamento ipertestuale per portarti al post (poiché ora è eliminato). Presumo che debba eliminare ogni prova dell’e-mail originale in arrivo, ma non ho idea di come fare.

2 Mi Piace

A meno che tu non abbia centinaia di migliaia di post, quello che consiglio è di cancellare il database e ricominciare da capo. Se vuoi farlo in un modo più doloroso che probabilmente ti causerà problemi, puoi capire come eliminare i PostCustomField che contengono gli ID di importazione. Se vuoi eliminarli tutti, puoi usare PostCustomField.all.destroy_all, ma se devi farlo, tanto vale farlo nel modo più semplice.

2 Mi Piace

Quando dici ‘svuotare il database’ intendi tutti gli argomenti e i post di Discourse e anche tutti i record delle e-mail in arrivo che sono passati attraverso l’importatore (ma lasciare intatta la struttura di Discourse, gli utenti, ecc.)? Oppure intendi il database delle e-mail importate, che lascerebbe i post esistenti al loro posto ma mi permetterebbe di rieseguire l’importatore con le vecchie e-mail?

1 Mi Piace

Oh. Se hai eseguito la tua importazione su un’istanza live che aveva utenti che aggiungevano post e simili, allora sei nei guai.

Se hai eliminato tutti i post importati, puoi fare qualcosa come

PostCustomField.where(name: “import_id”).destroy_all

1 Mi Piace

Molte grazie @pfaffman! Sembra aver funzionato, anche se non sono del tutto sicuro di cosa sia successo dietro le quinte.

Ho usato ./launcher enter app, poi ho digitato rails c, poi PostCustomField.where(name: \"import_id\").destroy_all e sono apparse molte scritte (con alcune parti colorate di rosso e verde), poi quando sono uscito da rails e ho rieseguito import_mbox.sh le email originali che erano state precedentemente importate e poi cancellate da me (rimuovendo gli argomenti) sono ricomparse in discourse. Se copio le email nell’altra cartella di categoria, vengono reimportate anche loro, come duplicati, come sospettavo.

È solo un forum di test con alcune risposte aggiuntive come test per le persone da esaminare prima di decidere se trasferirci o meno su discourse, quindi cancellare e riavviare non sarebbe stata una grande perdita.

Hai anche menzionato di cancellare il database e reimportare tutto. Qual è il modo più semplice per cancellare?

Sono contento che abbia funzionato! E sono contento che ricominciare non sarà un problema. Penso davvero che sia meglio ricominciare da capo, se possibile.

Il modo più semplice per eliminare è:

rm -r /var/discourse/shared/standalone/post*

E poi ricostruire. Un’altra cosa che puoi fare è fare un backup subito dopo aver ricostruito e poi puoi ripristinare quello.

1 Mi Piace