Migrer un forum phpBB3 vers Discourse

@gerhard : Pourrais-je réaliser le nettoyage des caractères mal encodés après la migration en utilisant Sidekiq ? Je suis vraiment nouveau sur Discourse, donc je ne comprends peut-être pas comment cela fonctionne.
Ou peut-être via un script SQL directement dans MariaDB ?

Merci beaucoup !

Bien sûr ! Vous pourriez aussi simplement éditer chaque post manuellement. C’est environ 10 fois plus facile de le faire avant, quand il est possible de tout recommencer.

J’ai essayé plusieurs choses pour tenter de corriger l’encodage côté MariaDB, mais sans trouver de solution. Voici un extrait de code que j’ai utilisé pour corriger l’encodage sur une importation sur laquelle je travaille.

    ### Encodage WIN1252
    win_encoded = ''
    begin
      win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
                            invalid: :replace, undef: :replace, replace: ""
                           ).force_encoding('utf-8').scrub
    rescue => e
      puts "\n#{'-'*50}\nWin1252 a échoué pour \n\n#{raw}\n\n"
      win_encoded = ''
    end
1 « J'aime »

super merci :slight_smile:

1 « J'aime »

Ce fut une expérience douloureuse. J’ai essayé plusieurs encodages et en ai inclus plusieurs dans le message afin de pouvoir les comparer. Celui-ci semblait résoudre la plupart des problèmes la plupart du temps. Il m’a fallu beaucoup plus de temps que prévu pour comprendre .scrub, car sans lui, je me retrouvais avec des chaînes de caractères qui ne pouvaient plus être traitées avec gsub.

Quelqu’un a-t-il déjà une bonne solution pour importer des listes imbriquées depuis phpBB ?

Je ne connais pas assez Ruby pour savoir comment aborder le problème – je suis bloqué sur ce code :

 def process_lists(text)
      # convertir les balises de liste en ul et les balises list=1 en ol
      # list=a n'est pas pris en charge, donc le traiter comme list=1
      # list=9 et list=x ont le même résultat que list=1 et list=a
      text.gsub!(/\[list\](.*?)\[\/list:u\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "* #{$1}\n" }
      end
      text.gsub!(/\[list=.*?\](.*?)\[\/list:o\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "1. #{$1}\n" }
      end
    end

Quelqu’un a-t-il une idée de la façon dont pourrait se présenter une « boucle » sur une liste imbriquée ?

Voici un exemple de BBCode :

[list]
   [*]
   [list=a]
      [*]a
      [*]b
      [*]c
      [*]d
      [*]e
   [/list]
   [*]liste externe
[/list]
1 « J'aime »

@helmi

Avez-vous examiné comment ce plugin de discours officiel pourrait vous aider avec les balises LIST ?

1 « J'aime »

Je ne l’ai pas encore fait, mais je le ferai, merci. Cependant, j’essaie de l’éviter car je ne souhaite pas prendre en charge des balises BB supplémentaires à long terme — je préférerais vraiment convertir le contenu lors de l’importation. Les listes imbriquées ne sont pas un obstacle majeur, mais ce serait formidable de pouvoir les gérer.

Vous pourriez créer une sauvegarde, passer à phpBB 3.2 et utiliser ma branche expérimentale. Elle offre un bien meilleur support des BBCodes. :wink:

1 « J'aime »

Cela semble intéressant, mais je préférerais ne plus toucher à phpBB. En dehors des listes, le processus d’importation est déjà plus ou moins optimisé. Cela nous ferait perdre du temps et nécessiterait davantage de tests. Mais c’est encourageant de voir les progrès de la 3.2 avancer si bien.

Salut @helmi,

Oui, nous nous battons avec ce genre de problèmes depuis un mois maintenant, en migrant un forum vB3 legacy avec près de deux décennies de toutes sortes d’utilisations folles du bbcode, d’imbrications, d’incrustations, etc.

Il n’est pas trivial d’obtenir ce type de migration à 99,9 % parfait. Par exemple, nous avons écrit du code Ruby pour supprimer toutes les balises bbcode de nos balises de code, car le markdown n’« aime » pas le bbcode à l’intérieur des blocs de code délimités.

De notre côté, nous finalisons encore de nombreuses routines de prétraitement en Ruby et nous nous rapprochons de plus en plus, mais nous n’atteindrons jamais la « perfection » ou les « 100 % » avec près de deux décennies de publications de certains utilisateurs bbcode très créatifs (sans compter tous ces utilisateurs qui ont copié-collé dans les publications, etc…)

Nous travaillons encore sur le nettoyage des problèmes liés à la conversion du BBcode vers le Markdown.

Parfois, je me dis « supprime tout simplement tout » … LOL

1 « J'aime »

Il semble que nous rencontrions toujours des problèmes avec les noms d’utilisateurs modifiés ou non importés lorsqu’ils contiennent certains caractères spéciaux.

Y a-t-il des problèmes connus avec l’importateur, ou est-ce que je configure mal l’option de nom d’utilisateur Unicode dans Discourse ? Je l’ai activée, mais la liste blanche contient toujours des umlauts. Dois-je supprimer la liste blanche pour autoriser tous les caractères Unicode, ou dois-je lister tous les caractères ? Je pensais que l’activation de l’Unicode permettait tous les caractères Unicode, et que sa désactivation ne permettait que ceux de la liste blanche.

Lors de l’importation, il semble que certains caractères comme @ ou * soient remplacés par _ – je peux imaginer que @ puisse causer des problèmes avec les mentions @, mais… je voulais juste m’assurer avant de devoir gérer manuellement tous ces utilisateurs avant l’importation (ce qui serait un gros tracas).

Avez-vous des conseils à ce sujet ?

Salutations,
Frank

Même lorsque vous activez le support Unicode, seuls les lettres et les chiffres sont autorisés. Voir Unicode usernames and group names

2 « J'aime »

Bonjour,

Tout d’abord, merci pour toute la documentation et l’aide apportée dans ce sujet.
Je viens d’importer un ancien forum phpBB3 dans un nouveau Discourse.

Tout s’est déroulé assez fluidement avec 200 000 messages et 20 000 pièces jointes, mais Sidekiq a eu un peu de mal à tout traiter après l’importation.

Je rencontre maintenant un nouveau problème avec les balises images incluses dans des balises URL, comme ceci :
[url=http://www.casimages.com][img]http://nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg[/img][/url]

Après l’importation (conversion du BBCode en Markdown), ces images s’affichent simplement comme des liens :
[nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg](http://www.casimages.com)

Existe-t-il un moyen de traiter ou de reconstruire ces liens afin qu’ils s’affichent comme des images et soient automatiquement téléchargés vers S3 ?

Merci d’avance pour votre aide.

Recherchez dans les paramètres du système l’option « télécharger à distance »

MODIFICATION : Oups. Il semble que ce ne soit pas votre problème. Désolé.

@pfaffman

Merci Jay. Oui, j’ai déjà activé le paramètre « télécharger à distance ». Mon problème est que ces images s’affichent sous forme de lien (et l’URL de l’image ne correspond qu’à la « partie affichée » du lien ; la cible ne correspond pas à un contenu image).

1 « J'aime »

Bonjour,

J’ai actuellement un forum importé depuis phpBB.
Je songe à importer un autre forum phpBB (36 000 messages, 230 membres) dans mon installation Discourse existante. Ils partagent des catégories et des utilisateurs communs.

Les comptes utilisateurs pourraient être fusionnés manuellement.
En ce qui concerne les messages, après l’importation, ils seraient déplacés manuellement vers les catégories existantes.

Est-ce que cela fonctionnerait presque « clé en main » grâce au script d’importation, ou est-ce que ce serait le chaos ?

Que se passe-t-il si j’importe un forum phpBB et que certains e-mails d’utilisateurs existent déjà dans mon Discourse actuel ?

Vous devrez effacer les champs personnalisés import_id, sinon les nouveaux articles seront considérés comme déjà importés.

Cela ressemble à une tâche qui nécessitera pas mal de manipulations sur une installation locale, en utilisant une sauvegarde de votre base de données principale.

2 « J'aime »

Merci pour ces informations précieuses auxquelles je n’avais pas pensé :+1:t6:
Oui, je vais le faire et essayer sur un serveur de test pour voir si c’est gérable.

Concernant le contexte :

J’héberge un forum national Discourse dédié à la monoculture.
J’héberge également un forum phpBB pour une association locale de monoculture.
Les deux forums partagent certains utilisateurs, et certains sujets ou thèmes de discussion sont redondants. L’idée serait de fusionner le forum de l’association locale dans le forum national afin d’éliminer cette redondance, et de créer un groupe ou une catégorie dédiée aux sujets liés à l’association locale.

De plus, les personnes qui ne sont présentes que sur le forum de l’association locale rejoindront ainsi le forum national et pourraient peut-être y apporter plus d’activité.

Quelqu’un a-t-il une idée de la raison pour laquelle MySQL ne fonctionne pas dans le conteneur d’importation ?

J’ai effectué plusieurs exécutions et cela a toujours fonctionné, mais maintenant j’obtiens :

Impossible de se connecter au serveur MySQL local via le port :30810

Dès que j’essaie de démarrer l’importation. J’ai vérifié trois fois tout, reconstruit le conteneur d’importation plusieurs fois. Tout est présent, mais MySQL ne semble pas fonctionner. :frowning:

Je suis un peu terrifié car il s’agit en fait de notre véritable migration vers Discourse aujourd’hui.

:question: :question::question: Cela semble étrange. D’où cela vient-il ?