Migrare un forum phpBB3 a Discourse

Tutto questo è piuttosto tipico.

Penso che le modifiche che suggerisci probabilmente non danneggeranno altre importazioni. Spesso ci sono una serie di modifiche come queste e poi un sacco di altre modifiche specifiche per l’importazione e capire quali sono quali e testare di nuovo solo con quelle richiederebbe molto lavoro, quindi non viene creato un PR.

Sono contento che tu ci sia riuscito!

3 Mi Piace

Grazie Constanza, link molto utile. :+1:


Grazie per le informazioni Jay. Farò una PR più tardi, dopo aver finito la migrazione, se può aiutare ad avere uno strumento di migrazione phpBB3 ancora migliore.

Lo script attuale ignora anche i tag [size=XXX che ho incontrato durante altre migrazioni.
Nella mia migrazione attuale, ho creato un piccolo script nel mio importer e ho usato il valore di XXX per sostituire questi tag con \u003csmall\u003econtenuto\u003c/small\u003e e \u003cbig\u003econtenuto\u003c/big\u003e poiché sono supportati da Discourse.
Ma questo era un desiderio personale e potrebbe essere una soluzione più appropriata (in generale) semplicemente eliminare questi tag [size, come lo script di importazione fa già con i tag [color].

4 Mi Piace

Grazie @Canapin per tutti i tuoi feedback. Una PR è sicuramente benvenuta!

Inoltre, un piccolo anticipo: stiamo lavorando a una soluzione che dovrebbe rendere tutte le importazioni, non solo phpBB, molto migliori, più veloci, più facili da personalizzare e liberarci di quei fastidiosi problemi con la conversione del BBCode… :wink:

4 Mi Piace

Durante l’importazione dei miei post, ho riscontrato una serie di questi errori (non per tutti i post):

   251491 / 251672 ( 99.9%)  [14140 elementi/min]  Eccezione durante la creazione del post 354629. Salto.
undefined method `[]' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:66:in `block in map_first_post'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `try'
/var/www/discourse/script/import_scripts/base.rb:576:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:523:in `block in create_posts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:510:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:192:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:873:in `loop'
/var/www/discourse/script/import_scripts/base.rb:873:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:254:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:188:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:38:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'

Ma non sono riuscito a capire cosa causi questo.

Qualche idea?

Come posso verificare se ho effettivamente post mancanti? Non sono riuscito a trovare come visualizzare i dati (contenuto del post, ad esempio) corrispondenti a “Eccezione durante la creazione del post 354629”.

Non ricordo di aver riscontrato questo errore nei miei altri test di importazione dei giorni precedenti, ma forse non ci ho prestato attenzione… Potrebbe essere correlato a questo problema noto?

251490 / 251672 ( 99.9%)  [14140 elementi/min]  Il post padre 337703 non esiste. Salto 354628: vw-camper est malade !?

Ho eseguito lo script di importazione due volte, come dovrebbe essere, riguardo a questo specifico problema.

1 Mi Piace

Assicurati di impostare tag_mappings: {} nel tuo file settings.yml se non stai utilizzando questa funzionalità.

3 Mi Piace

Mi sento stupido! Ci ho anche pensato, ma ero così sicuro di non aver mai riscontrato questo errore prima che non ci ho provato… :facepalm:

Ha risolto il problema, grazie mille.


Suppongo che tu non possa dire molto al momento, ma hai qualche indizio su come funzionerà e quando alcuni script di importazione utilizzabili potranno essere usati con questa nuova cosa?
Potrei migrare un altro phpBB quest’anno, quindi potrebbe essere molto interessante per me saperne un po’ di più. :slight_smile:

1 Mi Piace

Ciao, sto testando la migrazione da phpbb 3.2 a discourse per un forum di dimensioni discrete (30k argomenti / 600k post) e quasi tutto funziona bene, a parte un paio di argomenti non importati (“Il post padre xx non esiste”), non risolti con esecuzioni multiple, ma non è un problema.
Il mio problema principale è che le importazioni successive con dati freschi (verificati con sha256sum nel file import/mysql/imported) non importano nuovi post in Discourse. Sto affrontando un’eccezione all’inizio del processo, non so se è collegata:

Impossibile associare il post con ID 6815

Il valore BIGINT UNSIGNED è fuori intervallo in '(`phpbb_prod`.`o`.`poll_option_total` - (select count(distinct `phpbb_prod`.`v`.`vote_user_id`) from `phpbb_prod`.`phpbb3_poll_votes` `v` join `phpbb_prod`.`phpbb3_users` `u` join `phpbb_prod`.`phpbb3_topics` `t` where ((`phpbb_prod`.`u`.`user_id` = `phpbb_prod`.`v`.`vote_user_id`) and (`phpbb_prod`.`v`.`topic_id` = `phpbb_prod`.`t`.`topic_id`) and (`phpbb_prod`.`v`.`poll_option_id` = `phpbb_prod`.`o`.`poll_option_id`) and (`phpbb_prod`.`t`.`topic_id` = `phpbb_prod

È un problema con i sondaggi incorporati nei post, dall’SQL visualizzato?

Buona giornata!

2 Mi Piace

Non posso dire molto ancora dato che è ancora in fase di sviluppo. I piani possono cambiare… Ma “quest’anno” è una buona scommessa. :wink:

2 Mi Piace

Il valore BIGINT UNSIGNED è fuori intervallo

Hmm, ci sono così tanti voti anonimi in questo sondaggio?
Dovrai modificare questo SQL:

Qualcosa del genere forse? https://stackoverflow.com/a/11704174/451338
Fammi sapere quando avrai trovato una soluzione o crea una PR con una correzione. Te ne sarei grato.

3 Mi Piace

I sondaggi risalgono all’inizio del forum, non ero responsabile in quel momento, ma penso che agli utenti anonimi non sia mai stato permesso di pubblicare/rispondere ai sondaggi

Con

 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

Sono in grado di interrogare tutti i voti dei sondaggi e per 2 di essi ho “voti_anonimi” negativi. Sembra che questo forum abbia in qualche modo permesso il voto anonimo, in realtà :slight_smile:

Grazie @gerhard per il suggerimento, approfondirò…

4 Mi Piace

Sto attualmente esaminando la migrazione di un forum phpBB a Discourse. Il problema è che il nostro phpBB utilizza Postgres invece di MySQL, quindi vorrei adattare lo script per funzionare anche con quello.

Qualcuno potrebbe darmi qualche dritta sul modo migliore per procedere? Idealmente, vorrei che tutti potessero beneficiare di questo lavoro, quindi vorrei che utilizzasse un approccio accettato a monte invece di limitarsi a un rapido e sporco adattamento per farlo funzionare.

Da quello che posso capire, sembra trattarsi principalmente di aggiungere le corrette istruzioni SQL per lo schema PostgreSQL utilizzando il giusto adattatore DB, tuttavia non sono sicuro di come l’intera orchestrazione per il container Docker debba essere adattata per avviare correttamente un’istanza PostgreSQL, se necessaria dal tipo di DB specificato nella configurazione, in cui importare il dump del DB ed eseguire le istruzioni.

2 Mi Piace

C’è uno script di importazione in blocco per phpBB in esecuzione su postgresql. L’hai visto? discourse/script/bulk_import/phpbb_postgresql.rb at main · discourse/discourse · GitHub

Tuttavia, non credo che sia stato utilizzato di recente, quindi è probabilmente rotto e potrebbe non funzionare con le versioni attuali di phpBB perché il formato di archiviazione Markdown è cambiato.

:+1:

Qualunque strada tu scelga, non passerei troppo tempo a perfezionare la tua soluzione a meno che tu non lo voglia davvero. Gli attuali script di importazione saranno deprecati entro quest’anno…

2 Mi Piace

Grazie, non ne ero a conoscenza! E grazie per l’avviso che gli script verranno deprecati, quindi immagino che non valga la pena integrare una funzionalità così importante per quelli se verranno comunque deprecati a breve? È prevista una sostituzione per essi?

1 Mi Piace

Sì, ovviamente ci sarà una sostituzione.

3 Mi Piace

Un’altra cosa importante che mi stavo chiedendo, devo impostare qualcos’altro oltre a disable_edit_notifications per assicurarmi che nessuno degli utenti importati venga contattato via email da Discourse per qualsiasi cosa io importi? Poiché attualmente l’istanza non è pubblica e stiamo solo sperimentando l’importazione e probabilmente avremo bisogno di diversi tentativi finché non sarà abbastanza buona, voglio evitare che vengano inviate email.

1 Mi Piace

Stai cercando l’impostazione del sito disable_emails

4 Mi Piace

Mentre [b]testo[/b] è supportato inline su Discourse, non viene interpretato per blocchi di testo che hanno nuove righe.

[b]Ad esempio, se ho questo testo nel mio post…

E continuo la mia riga dopo una riga vuota, chiudo il bbcode e il testo non verrà convertito in testo in grassetto[/b]

Lo stesso vale per [i] e probabilmente altri tag.

Non riesco a trovare una soluzione pulita per questo nella mia importazione. Qualche idea? :man_shrugging:

2 Mi Piace

Questa non è una soluzione ideale, ma ho un’idea per un piano B o C almeno.

Dopo l’importazione, potresti rimappare [b] a \u003cb\u003e e [/b] a \u003c/b\u003e poiché \u003cb\u003e funziona qui a livello di blocco

\u003cb\u003etest
\ntest\u003c/b\u003e

\u003cb\u003etest
\ntest\u003c/b\u003e

Ma su un forum di grandi dimensioni, ci vorrà un po’ :confused:

3 Mi Piace

Ottima idea!

Il mio forum non è ancora stato importato, quindi posso ancora lavorare sull’importatore.

Non sarebbe più sensato usare <strong> ed <em>, nonostante la loro “proprietà” semantica?

2 Mi Piace

Ottima notizia!

Penso che sia una buona cosa da provare per prima.

2 Mi Piace