Migrer un forum phpBB3 vers Discourse

C’est tout à fait typique.

Je pense que les changements que vous suggérez ne casseront probablement aucune autre importation. Souvent, il y a un ensemble de changements comme ceux-ci, puis une série d’autres changements spécifiques à l’importation, et déterminer lesquels sont lesquels et tester à nouveau avec seulement ceux-ci demanderait beaucoup de travail, donc une PR n’est pas créée.

Content que vous ayez terminé !

3 « J'aime »

Merci Constanza, lien très utile. :+1:


Merci pour les informations Jay. Je ferai une PR plus tard après avoir terminé la migration si cela peut aider à avoir un outil de migration phpBB3 encore meilleur.

Le script actuel ignore également les balises [size=XXX que j’ai rencontrées lors d’autres migrations.
Lors de ma migration actuelle, j’ai créé un script rapide dans mon importateur et j’ai utilisé la valeur de XXX pour remplacer ces balises par <small>contenu</small> et <big>contenu</big> car elles sont prises en charge par Discourse.
Mais c’était un souhait personnel et il pourrait y avoir une solution plus appropriée (en général) pour simplement supprimer ces balises [size, comme le script d’importation le fait déjà avec les balises [color].

4 « J'aime »

Merci @Canapin pour tous vos commentaires. Une PR est définitivement la bienvenue !

Aussi, un petit aperçu : Nous travaillons sur une solution qui devrait rendre toutes les importations – pas seulement phpBB – bien meilleures, plus rapides, plus faciles à personnaliser et à se débarrasser de ces problèmes gênants avec la conversion BBCode… :wink:

4 « J'aime »

Lors de l’importation de mes publications, j’ai rencontré plusieurs erreurs (pas pour toutes les publications) :

   251491 / 251672 ( 99.9%)  [14140 éléments/min]  Exception lors de la création de la publication 354629. Ignorée.
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>'

Mais je n’ai pas pu comprendre ce qui causait cela.

Des idées ?

Comment puis-je vérifier si j’ai réellement des publications manquantes ? Je n’ai pas trouvé comment afficher les données (contenu des publications par exemple) correspondant à “Exception while creating post 354629”.

Je ne me souviens pas avoir eu cette erreur lors de mes autres tests d’importation les jours précédents, mais peut-être que je n’y ai juste pas prêté attention… Cela pourrait-il être lié à ce problème connu ?

251490 / 251672 ( 99.9%)  [14140 éléments/min]  La publication parente 337703 n'existe pas. Ignorée 354628 : vw-camper est malade !?

J’ai exécuté le script d’importation deux fois, comme il se doit, concernant ce problème particulier.

1 « J'aime »

Assurez-vous de définir tag_mappings: {} dans votre fichier settings.yml si vous n’utilisez pas cette fonctionnalité.

3 « J'aime »

Je me sens stupide ! J’y ai même pensé, mais j’étais tellement sûr de ne pas avoir rencontré cette erreur auparavant que je n’ai pas essayé… :facepalm:

Cela a résolu le problème, merci beaucoup.


Je suppose que vous ne pouvez pas en dire beaucoup pour le moment, mais avez-vous une idée de son fonctionnement et quand des scripts d’importation utilisables pourront être utilisés avec cette nouvelle chose ?
Je pourrais migrer un autre phpBB cette année, donc cela pourrait être très intéressant pour moi d’en savoir un peu plus. :slight_smile:

1 « J'aime »

Salut, je teste une migration de phpbb 3.2 vers Discourse pour un forum de taille respectable (30k sujets / 600k messages) et presque tout fonctionne bien, à part quelques sujets non importés (“Le message parent xx n’existe pas”), non résolus après plusieurs tentatives, mais ce n’est pas un problème.
Mon problème principal est que les importations ultérieures avec des données fraîches (vérifiées avec le sha256sum dans le fichier import/mysql/imported) n’importent pas les nouveaux messages dans Discourse. Je rencontre une exception tôt dans le processus, je ne sais pas si c’est lié :

Échec du mappage du message avec l'ID 6815

La valeur BIGINT UNSIGNED est hors de portée dans '(`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

Est-ce un problème avec les sondages intégrés dans les messages, d’après le SQL affiché ?

Passe une bonne journée !

2 « J'aime »

Je ne peux pas en dire beaucoup pour le moment car c’est encore en cours de développement. Les plans peuvent changer… Mais “cette année” est un bon pari. :wink:

2 « J'aime »

« La valeur BIGINT UNSIGNED est hors limites »

Hmm, y a-t-il autant de votes anonymes dans ce sondage ?

Vous devrez modifier ce SQL : discourse/script/import_scripts/phpbb3/database/database_3_0.rb at f82f0e11798fea1130c91a3958a26dd52453e3f7 · discourse/discourse · GitHub

Quelque chose comme ceci peut-être ? https://stackoverflow.com/a/11704174/451338
Faites-moi savoir quand vous aurez trouvé une solution ou créez une PR avec une correction. J’apprécierais.

3 « J'aime »

Les sondages datent du tout début du forum, je n’étais pas responsable à cette époque, mais je pense que les utilisateurs anonymes n’ont jamais été autorisés à poster/répondre aux sondages.

Avec

 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

Je suis capable d’interroger tous les votes des sondages, et pour 2 d’entre eux, j’ai des « anonymous_votes » négatifs. Il semble que ce forum ait permis le vote anonyme d’une manière ou d’une autre :slight_smile:

Merci @gerhard pour le conseil, je vais creuser davantage…

4 « J'aime »

Je suis actuellement en train de migrer un forum phpBB vers Discourse. Le problème est que notre phpBB utilise Postgres au lieu de MySQL, j’aimerais donc adapter le script pour qu’il fonctionne également avec cela.

Quelqu’un pourrait-il me donner quelques pistes sur la meilleure façon de procéder ? Idéalement, j’aimerais que tout le monde bénéficie de ce travail, donc j’aimerais qu’il utilise une approche acceptée en amont au lieu de simplement le pirater rapidement pour qu’il fonctionne.

D’après ce que j’ai pu comprendre, il semble que la principale difficulté réside dans l’ajout des instructions SQL appropriées pour le schéma PostgreSQL en utilisant le bon adaptateur de base de données. Cependant, je ne suis pas sûr de la manière dont l’orchestration de l’ensemble du conteneur Docker doit être adaptée pour lancer correctement une instance PostgreSQL, si nécessaire en fonction du type de base de données spécifié dans la configuration, pour importer le dump de la base de données et exécuter les instructions.

2 « J'aime »

Il existe un script d’importation en masse pour phpBB fonctionnant sur PostgreSQL. L’avez-vous vu ? discourse/script/bulk_import/phpbb_postgresql.rb at main · discourse/discourse · GitHub

Cependant, je ne pense pas qu’il ait été utilisé récemment, il est donc probablement cassé et pourrait ne pas fonctionner avec les versions actuelles de phpBB car le format de stockage Markdown a changé.

:+1:

Quelle que soit la voie que vous choisissez, je ne passerais pas trop de temps à peaufiner votre solution, à moins que vous ne le vouliez vraiment. Les scripts d’importation actuels seront dépréciés dans le courant de l’année…

2 « J'aime »

Merci, je n’étais pas au courant ! Et merci pour l’avertissement que les scripts vont être dépréciés, donc je suppose que cela ne vaut peut-être pas la peine d’intégrer une fonctionnalité aussi importante pour ceux-ci s’ils vont de toute façon être bientôt dépréciés ? Y a-t-il un remplacement de prévu pour eux ?

1 « J'aime »

Oui, bien sûr qu’il y aura un remplacement.

3 « J'aime »

Une autre chose importante que je me demandais, dois-je configurer autre chose que disable_edit_notifications pour m’assurer qu’aucun des utilisateurs importés ne recevra d’e-mails de Discourse pour quoi que ce soit que j’importe ? Comme l’instance n’est actuellement pas publique et que nous expérimentons simplement l’importation et aurons probablement besoin de plusieurs essais jusqu’à ce qu’elle soit suffisamment bonne, je veux éviter que des e-mails ne soient envoyés.

1 « J'aime »

Vous recherchez le paramètre de site disable_emails

4 « J'aime »

Alors que [b]le texte[/b] est pris en charge en ligne sur Discourse, il n’est pas interprété pour les blocs de texte comportant des sauts de ligne.

[b]Par exemple, si j’ai ce texte dans mon message…

Et que je continue ma ligne après une ligne vide, je ferme le bbcode et le texte ne sera pas converti en texte en gras[/b]

Même chose pour [i] et probablement d’autres balises.

Je n’arrive pas à trouver de solution propre pour cela dans mon importation. Des idées ? :man_shrugging:

2 « J'aime »

Ce n’est pas une solution idéale, mais j’ai une idée pour un plan B ou C au moins.

Après l’importation, vous pourriez remapper [b] en \u003cb\u003e et [/b] en \u003c/b\u003e puisque \u003cb\u003e fonctionne sur le bloc ici

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

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

Mais sur un grand forum, cela prendra du temps :confused:

3 « J'aime »

Bonne idée !

Mon forum n’est pas encore importé, je peux donc encore travailler sur l’importateur.

N’est-ce pas que <strong> et <em> auraient plus de sens, nonobstant leur « propriété » sémantique ?

2 « J'aime »

C’est une excellente nouvelle !

Je pense que c’est une bonne chose à essayer en premier.

2 « J'aime »