Migrare una mailing list su Discourse (mbox, Listserv, Google Groups, ecc)

Grazie per aver fornito questa guida e lo script di importazione! L’ho usato con successo con un gruppo Google, utilizzando Google Takeout. Ho semplicemente inserito il file .mbox nella directory corretta ed eseguito lo script.

Ho avuto una domanda sull’importazione di email che hanno genitori non presenti nel file .mbox. Ad esempio, ci sono molte discussioni nel nostro gruppo che sono iniziate da un inoltro di un’email che non è stata inviata al gruppo, o aggiungendo il gruppo alla lista di risposta nel mezzo di una conversazione per includerli.

Attualmente, durante l’importazione, sembra che queste email precedenti non siano presenti. È possibile trovarle, se si fa clic sull’icona dell’email e si visualizza l’HTML. Ero curioso di sapere se qualcun altro ha riscontrato la stessa situazione e avesse soluzioni. Potrei immaginare di includere la catena di email precedente nel post o di provare a analizzarla ed estrarre un numero di messaggi da essa e aggiungerli tutti.

1 Mi Piace

Dovresti trovare un modo per generare quei messaggi dal testo citato e aggiungerli al file mbox (probabilmente con intestazioni Id) prima di eseguire lo script di importazione.

1 Mi Piace

Questo è davvero eccellente. Ma ho alcuni problemi con alcune email che arrivano su Discourse con un’email iniziale e poi le risposte in formato mbox nello stesso post, non formattate. Non sono sicuro di cosa stia causando questo.

La domanda è: come posso eliminare tutte le email importate (20 anni di valore) senza eliminare e ricreare l’istanza di Discourse di destinazione?

Sono consapevole che il requisito RAM consigliato sia 8 GB. Ho provato a importare 20 anni di post su una macchina virtuale da 2 GB e ha funzionato per un po’ prima di bloccarsi con il messaggio ‘killed’. Le macchine da 8 GB su provider di hosting come DigitalOcean sono costose (per me). C’è un modo per farlo con meno memoria? Importare in batch più piccoli, magari?

Forse eliminare quelle categorie e poi eliminare i campi personalizzati degli argomenti associati.

No, non credo che si possa fare molto con un’importazione su una macchina piccola. Potresti provare su un computer desktop, ma poi avresti problemi di larghezza di banda per riportare il database su Internet.

1 Mi Piace

So che non c’è molta attività su questo thread, ma non riesco a farlo funzionare correttamente. Molte delle email in formato mbox che importo non vengono suddivise correttamente. Le righe From appaiono così:

From MAILER-DAEMON Tue Nov 01 05:57:09 2022

Ma alcuni messaggi vengono importati correttamente, poi nello stesso corpo hanno elementi in formato mbox grezzo che iniziano con la tipica riga From. In altre parole, non vengono suddivisi. Non vedo la necessità di modificare l’espressione regolare che esegue la suddivisione e non conosco Ruby, quindi non posso eseguire il debug dello script di importazione.

Non so da dove andare avanti. Ci sono 20 anni di messaggi da importare, quindi non posso esaminare manualmente i messaggi importati per correggerli. In breve, questo script non funziona per me. Perché sarei l’unico a cui succede?

Non succede solo a te. Il mio primo lavoro retribuito su Discourse è stato per mesi a ripulire vecchi file mbox che erano stati modificati manualmente per qualche motivo che non riesco a ricordare.

Sembra che tu debba modificare le espressioni regolari o trovare un altro modo per correggere i messaggi errati. Un modo è usare qualche altro strumento per dividere i messaggi in uno per file.

A titolo informativo, ho scritto diversi script di importazione prima di conoscere Ruby.

Ogni importazione è unica. Con 20 anni di dati, è molto probabile che avrai diversi problemi poiché le cose sono cambiate nei vari sistemi utilizzati.

2 Mi Piace

Ci puoi scommettere. Questo è sicuro.

Voglio importare 20 anni di messaggi dal mio sistema mailman2 in una directory di archivio, ma non voglio creare ID utente (nemmeno quelli provvisori) per loro, poiché molti dei nostri iscritti si sono trasferiti o sono deceduti e ciò creerebbe molti account che occuperebbero solo spazio.

Posso importarli tutti sotto lo stesso ID utente (forse ‘archive’)?

E questa potrebbe essere una domanda stupida, ma poiché l’app è disattivata durante il processo di importazione, ciò significa che gli utenti che si sono iscritti per ricevere email sui nuovi post non verranno inondati di email su tutti gli archivi appena caricati?

Puoi commentare la funzione import_users e tutti i messaggi saranno di proprietà del sistema.

Non risparmierai molto spazio.

Nessun utente riceverà email finché non avrà utilizzato il processo “password dimenticata” per accedere al proprio account. Se stai importando questi dati in una community esistente, allora credo che gli utenti riceveranno notifiche sui nuovi messaggi creati dallo script di importazione.

1 Mi Piace

Grazie, stavo esaminando lo script di importazione e ho pensato che potrei semplicemente disabilitare la sezione dei nuovi utenti. Testarlo è nella mia lista.

Non si tratta di spazio su disco, ma di avere potenzialmente centinaia di account utente in staging che non verranno mai utilizzati, quindi è più una questione di spazio mentale o di un elenco di utenti molto lungo.

Conosci i tuoi utenti, ma avere account che nessuno utilizzerà sembra molto meglio che non sapere chi ha pubblicato messaggi per 20 anni.

3 Mi Piace

Questo è un punto valido, Jay.

Non riesco a trovare il file import_mbox.sh e quando provo a eseguire direttamente lo script mbox.rb, ricevo un sacco di errori Ruby:

root@lists-import:/var/www/discourse/script/import_scripts# ruby mbox.rb mbox
fatal: detected dubious ownership in repository at ‘/var/www/discourse’
To add an exception for this directory, call:

    git config --global --add safe.directory /var/www/discourse

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.7/lib/zeitwerk/loader/callbacks.rb:25:in `on_file_autoloaded’: expected file /var/www/discourse/lib/freedom_patches/pluck_first.rb to define constant FreedomPatches::PluckFirst, but didn’t (Zeitwerk::NameError)

  raise Zeitwerk::NameError.new(msg, cref.last)

Saluti a tutti. Che bella guida. Grazie a Gerhard e agli altri per aver contribuito.

Qualcuno di voi l’ha adattata per Lyris? Sono interessato a migrare un’installazione storica e vorrei capire se ci sono state preoccupazioni particolari che hanno incontrato in un progetto simile.

Ho dovuto importare post da una mailing list in Discourse e ho riscontrato due problemi.

  • sqlite3 non è stato trovato.
  • Non sono riuscito a trovare import_mbox.sh

Ecco le mie soluzioni:

installa sqlite3

Ho aggiunto a Gemfile:

 gem "sqlite3", "~> 1.3", ">= 1.3.13"

poi ho eseguito:

cd discourse
bundle config set frozen false
bundler install

esegui l’importazione

cd discourse
RAILS_ENV=production bundle exec rails runner script/import_scripts/mbox.rb script/import_scripts/mbox/settings.yml
1 Mi Piace

Probabilmente ti sei perso il seguente passaggio che è nascosto dietro “Importazione regolare” in 1.2. Preparazione del container Docker.

1 Mi Piace

Sto riscontrando questo errore can't modify frozen String. Qualcuno può suggerire una soluzione o capire cosa sto sbagliando?

root@sajcf:~# /var/discourse/launcher stop app
x86_64 arch detected.
+ /usr/bin/docker stop -t 600 app
app
root@sajcf:~# /var/discourse/launcher enter import
x86_64 arch detected.
root@sajcf-import:/var/www/discourse# import_mbox.sh
The mbox import is starting...

Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating index
indexing files in /shared/import/data/jjcf
indexing /shared/import/data/jjcf/SAJCF.mbox

indexing replies and users

creating categories
/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': can't modify frozen String: "jjcf" (FrozenError)
        from /var/www/discourse/script/import_scripts/base.rb:447:in `block in create_categories'
        from /var/www/discourse/script/import_scripts/base.rb:438:in `each'
        from /var/www/discourse/script/import_scripts/base.rb:438:in `create_categories'
        from /var/www/discourse/script/import_scripts/mbox/importer.rb:50:in `import_categories'
        from /var/www/discourse/script/import_scripts/mbox/importer.rb:34:in `execute'
        from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        from script/import_scripts/mbox.rb:13:in `<module:Mbox>'
        from script/import_scripts/mbox.rb:11:in `<module:ImportScripts>'
        from script/import_scripts/mbox.rb:10:in `<main>'

Puoi cercare su Google come risolvere questo problema. Penso che un .dup potrebbe essere un modo semplice.

1 Mi Piace

per essere più specifici, ho modificato con successo il codice che ha permesso l’importazione, aggiungendo .dup alla riga 447 del file /var/www/discourse/script/import_scripts/base.rb:

params[:name].dup.strip!

Una cosa non è chiara: come posso importare in uno dei siti multisito?

Qualcuno ha riscontrato un errore “impossibile modificare String congelata”? Il mio index.db viene creato correttamente, ma fallisce durante la creazione delle categorie.

root@xxxxxxxxxx:/var/www/discourse# import_mbox.sh
L'importazione mbox è in corso...

Caricamento gruppi esistenti...

Caricamento utenti esistenti...

Caricamento categorie esistenti...

Caricamento post esistenti...

Caricamento argomenti esistenti...

creazione indice

indicizzazione file in /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com

indicizzazione /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com/export.mbox

indicizzazione risposte e utenti

creazione categorie

/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': **impossibile modificare String congelata: \"xxxxx-xxxxxxx@xxxxxxx.com\" (****FrozenError****)**

from /var/www/discourse/script/import_scripts/base.rb:447:in `block in create_categories'

from /var/www/discourse/script/import_scripts/base.rb:438:in `each'

from /var/www/discourse/script/import_scripts/base.rb:438:in `create_categories'

from /var/www/discourse/script/import_scripts/mbox/importer.rb:50:in `import_categories'

from /var/www/discourse/script/import_scripts/mbox/importer.rb:34:in `execute'

from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'

from script/import_scripts/mbox.rb:13:in `<module:Mbox>'

from script/import_scripts/mbox.rb:11:in `<module:ImportScripts>'

from script/import_scripts/mbox.rb:10:in `<main>'