Nous avons migré avec succès notre communauté (techenclave.com) de XenForo vers Discourse.
Nombre total de messages : 2,5 millions
Nombre total d’utilisateurs : 79K (actifs et bannis)
Nombre total de messages privés : 0,7 million
Il s’agit d’une communauté vieille de 20 ans, elle a donc connu sa juste part de migrations depuis Proboards, Vbulletin, IPB, Xenforo et maintenant Discourse.
La migration nous a pris 4 jours. Mais elle a nécessité 4 semaines de pré-travaux de migration et 4 semaines de développement de plugins personnalisés avant cela.
Merci à tous de votre aide et de vos conseils lorsque nous étions bloqués. ![]()
Dans l’ensemble, ce fut une migration très réussie, avec presque aucune donnée utile laissée pour compte.
Le cœur de notre migration a été construit sur un script d’importation XenForo amélioré, améliorant considérablement une base standard. Nous avons également utilisé plusieurs scripts de support spécialisés pour gérer des transformations de données spécifiques et assurer l’intégrité des données après l’importation.
Améliorations clés du script d’importation principal XenForo
Optimisation des performances (Pagination par jeu de clés) : L’amélioration la plus critique est l’adoption de la pagination par jeu de clés (WHERE id > last_id). Cette méthode améliore considérablement la vitesse de traitement par lots par rapport aux requêtes OFFSET traditionnelles, en particulier sur de grands ensembles de données, en utilisant les clés primaires indexées pour récupérer le prochain ensemble d’enregistrements.
Point de contrôle et reprise robustes : Une logique de point de contrôle avancée (utilisant des fichiers .json) a été mise en œuvre pour les utilisateurs, les sujets, les réponses et les messages privés. Cela permet au processus d’importation de reprendre en toute sécurité à partir du dernier enregistrement importé avec succès après des interruptions (par exemple, redémarrages de serveur, erreurs de script), ce qui permet d’économiser un temps considérable.
Stratégie d’importation des messages en deux passes : Les messages sont maintenant importés en deux passes distinctes :
Sujets d’abord : Tous les fils XenForo d’origine (premiers messages) sont importés, garantissant que les sujets parents existent avant les réponses.
Réponses ensuite : Les messages suivants dans les fils sont ensuite importés, les reliant correctement à leurs sujets Discourse nouvellement créés. Cette approche structurée minimise les réponses orphelines et améliore la cohérence des données.
Importation complète des réactions/j’aime :
Le script différencie désormais intelligemment les réactions XenForo qui correspondent directement aux “J’aime” (cœurs) de base de Discourse et celles qui sont des réactions personnalisées.
Il prend en charge l’insertion en masse des j’aime de base (dans la table post_actions) et des réactions personnalisées (en utilisant le plugin discourse-reactions), accélérant considérablement le processus.
Comprend un mappage des noms courts d’émojis XenForo aux équivalents Discourse (par exemple, thumbsup vers +1, heart_eyes vers heart).
Importation enrichie des données du marché (Plugin personnalisé) :
Une section dédiée a été ajoutée pour importer les données détaillées des annonces du marché (par exemple, prix, emplacement, état, garantie, options de paiement) à partir de la table thread_field_value de XenForo.
Ces données sont stockées dans un modèle personnalisé TecencMarket::Listing et sous forme de champs personnalisés de sujet, permettant un affichage et des fonctionnalités plus riches sur Discourse.
Importation des commentaires du marché (Plugin personnalisé) :
Une nouvelle fonction a été introduite pour migrer les commentaires/évaluations des utilisateurs (j’aime/je n’aime pas) associés aux transactions du marché.
Conversion des préfixes de fil en balises : Le script convertit désormais automatiquement les préfixes de fil XenForo en balises Discourse. Ceci est crucial pour maintenir l’organisation et la découvrabilité du contenu, en utilisant le plugin discourse-tagging. Il mappe également correctement les ID de préfixes aux titres lisibles par l’homme en utilisant la table phrase de XenForo.
Traitement amélioré du contenu des messages : Cette méthode a reçu des mises à jour importantes pour une meilleure conversion Markdown et la gestion du BBCode complexe de XenForo :
Gestion améliorée des citations : Conversion des balises [QUOTE] de XenForo, y compris la gestion des utilisateurs cités et la liaison aux messages/sujets Discourse spécifiques lorsque cela est possible.
Intégrations multimédias corrigées : Garantit que tous les médias importés (YouTube, Twitter/X) sont sur leurs propres lignes pour permettre la fonctionnalité d’intégration/d’aperçu de Discourse, et convertit les anciennes balises BBCode [MEDIA] en URL standard.
Conversion de tableaux : Convertit le BBCode [TABLE] de XenForo en tableaux Markdown.
Gestion des pièces jointes (en ligne et ajoutées) : La logique de traitement des pièces jointes a été refactorisée. Elle tente désormais de remplacer les balises [ATTACH] par le Markdown correct pour le fichier téléchargé. De manière cruciale, toutes les pièces jointes qui n’étaient pas explicitement marquées [ATTACH] dans le contenu du message sont maintenant ajoutées à la fin du message sous un en-tête clair “Pièces jointes :”, garantissant qu’aucun fichier n’est perdu.
Conversion d’émojis/smileys : Mappage élargi des smileys XenForo aux émojis natifs de Discourse, améliorant la cohérence visuelle.
Nettoyage général du BBCode : Suppression et conversion plus complètes de diverses balises BBCode (par exemple, [B], [I], [URL], [IMG], [LIST], [CODE], [COLOR], [FONT], [SIZE], [INDENT], [USER]).
Encodage et nettoyage des caractères : Comprend .scrub! pour les séquences UTF-8 invalides et CGI.unescapeHTML pour le décodage correct des entités HTML.
Gestion des utilisateurs suspendus : Les utilisateurs XenForo bannis sont maintenant importés en tant qu’utilisateurs Discourse suspendus, conservant leurs comptes mais limitant leur activité, les raisons du bannissement étant conservées dans des champs personnalisés.
Importation des favoris : Importe tous les favoris de XenForo vers Discourse. Il n’y en avait pas beaucoup au départ.
Une grande partie des utilisateurs n’étaient pas satisfaits après la migration. Ce qui est attendu. Ce n’est pas quelque chose que vous n’avez pas déjà entendu après une migration. Néanmoins, je partagerai un résumé des commentaires plus tard dans ce sujet, il pourrait y avoir matière à réflexion pour l’avenir de Discourse.

