Wir haben unsere Community (techenclave.com) erfolgreich von XenForo auf Discourse migriert.
Gesamte Beiträge: 2,5 Millionen
Gesamte Benutzer: 79.000 (aktiv und gesperrt)
Gesamte private Nachrichten: 0,7 Millionen
Es handelt sich um eine 20 Jahre alte Community, die daher einige Migrationen von Proboards, Vbulletin, IPB, Xenforo und nun Discourse erlebt hat.
Die Migration hat 4 Tage gedauert. Zuvor gab es jedoch 4 Wochen Vorarbeit für die Migration und 4 Wochen Entwicklung benutzerdefinierter Plugins.
Vielen Dank an alle, die geholfen und uns geführt haben, wo wir feststeckten. ![]()
Insgesamt war es eine äußerst erfolgreiche Migration, bei der fast keine nützlichen Daten verloren gingen.
Der Kern unserer Migration basierte auf einem erweiterten XenForo-Importskript, das eine Standardbasis erheblich verbesserte. Wir haben auch mehrere spezialisierte unterstützende Skripte verwendet, um spezifische Datentransformationen durchzuführen und die Datenintegrität nach dem Import sicherzustellen.
Wichtige Verbesserungen im Haupt-XenForo-Importskript
Leistungsoptimierung (Keyset Pagination): Die wichtigste Verbesserung ist die Einführung von Keyset Pagination (WHERE id > last_id). Diese Methode verbessert die Geschwindigkeit der Stapelverarbeitung im Vergleich zu herkömmlichen OFFSET-Abfragen drastisch, insbesondere bei großen Datensätzen, indem sie indizierte Primärschlüssel zum Abrufen der nächsten Datensatzmenge verwendet.
Robuste Checkpointing- und Wiederaufnahmefunktion: Es wurde eine fortschrittliche Checkpointing-Logik (unter Verwendung von .json-Dateien) für Benutzer, Themen, Antworten und private Nachrichten implementiert. Dies ermöglicht es dem Importprozess, nach Unterbrechungen (z. B. Serverneustarts, Skriptfehler) sicher vom letzten erfolgreich importierten Datensatz fortzufahren, was erhebliche Zeit spart.
Zweistufige Beitragsimportstrategie: Beiträge werden nun in zwei separaten Durchgängen importiert:
Zuerst Themen: Alle ursprünglichen XenForo-Threads (erste Beiträge) werden importiert, um sicherzustellen, dass übergeordnete Themen vorhanden sind, bevor Antworten importiert werden.
Danach Antworten: Nachfolgende Beiträge innerhalb von Threads werden dann importiert und korrekt mit ihren neu erstellten Discourse-Themen verknüpft. Dieser strukturierte Ansatz minimiert verwaiste Antworten und verbessert die Datenkonsistenz.
Umfassender Import von Reaktionen/Likes:
Das Skript unterscheidet nun intelligent zwischen XenForo-Reaktionen, die direkt den Kern-„Likes“ (Herzen) von Discourse zugeordnet werden, und benutzerdefinierten Reaktionen.
Es unterstützt die Masseneinfügung von Kern-Likes (in die Tabelle post_actions) und benutzerdefinierten Reaktionen (unter Verwendung des Plugins discourse-reactions), was den Prozess erheblich beschleunigt.
Enthält eine Zuordnung von XenForo-Emoji-Kurznamen zu Discourse-Entsprechungen (z. B. thumbsup zu +1, heart_eyes zu heart).
Erweiterter Import von Marktplatzdaten (benutzerdefiniertes Plugin):
Ein dedizierter Abschnitt wurde hinzugefügt, um detaillierte Marktplatzangebotsdaten (z. B. Preis, Standort, Zustand, Garantie, Zahlungsoptionen) aus der Tabelle thread_field_value von XenForo zu importieren.
Diese Daten werden in einem benutzerdefinierten TecencMarket::Listing-Modell und als benutzerdefinierte Themenfelder gespeichert, was eine reichhaltigere Anzeige und Funktionalität auf Discourse ermöglicht.
Import von Marktplatzbewertungen (benutzerdefiniertes Plugin):
Eine neue Funktion wurde eingeführt, um Benutzerfeedback/Bewertungen (Likes/Dislikes) im Zusammenhang mit Marktplatztransaktionen zu migrieren.
Konvertierung von Thread-Präfixen in Tags: Das Skript konvertiert nun automatisch die Thread-Präfixe von XenForo in Discourse-Tags. Dies ist entscheidend für die Aufrechterhaltung der Organisation und Auffindbarkeit von Inhalten und verwendet das discourse-tagging-Plugin. Es ordnet auch korrekt Präfix-IDs menschlich lesbaren Titeln unter Verwendung der phrase-Tabelle von XenForo zu.
Verbesserte Verarbeitung von Beitragsinhalten: Diese Methode wurde erheblich aktualisiert, um die Markdown-Konvertierung und die Verarbeitung von XenForos komplexem BBCode zu verbessern:
Verbesserte Zitatbehandlung: Konvertierung von XenForos [QUOTE]-Tags, einschließlich der Behandlung von zitierten Benutzern und der Verknüpfung mit spezifischen Discourse-Beiträgen/Themen, wenn möglich.
Korrigierte Medien-Einbettungen: Stellt sicher, dass alle importierten Medien (YouTube, Twitter/X) auf ihren eigenen Zeilen stehen, um die Oneboxing-/Einbettungsfunktion von Discourse zu ermöglichen, und konvertiert alte BBCode [MEDIA]-Tags in Standard-URLs.
Tabellenkonvertierung: Konvertiert XenForos [TABLE]-BBCode in Markdown-Tabellen.
Anhangsbehandlung (Inline & Angehängt): Die Logik zur Verarbeitung von Anhängen wurde überarbeitet. Sie versucht nun, [ATTACH]-Tags durch das korrekte Markdown für die hochgeladene Datei zu ersetzen. Entscheidend ist, dass alle Anhänge, die nicht explizit im Beitragsinhalt mit [ATTACH] gekennzeichnet waren, nun am Ende des Beitrags unter einer klaren Überschrift „Anhänge:“ angehängt werden, um sicherzustellen, dass keine Dateien verloren gehen.
Emoji/Smiley-Konvertierung: Erweiterte Zuordnung von XenForo-Smileys zu nativen Discourse-Emojis zur Verbesserung der visuellen Konsistenz.
Allgemeine BBCode-Bereinigung: Umfassendere Entfernung und Konvertierung verschiedener BBCode-Tags (z. B. [B], [I], [URL], [IMG], [LIST], [CODE], [COLOR], [FONT], [SIZE], [INDENT], [USER]).
Zeichenkodierung & Bereinigung: Enthält .scrub! für ungültige UTF-8-Sequenzen und CGI.unescapeHTML für die ordnungsgemäße Dekodierung von HTML-Entitäten.
Behandlung gesperrter Benutzer: Gesperrte XenForo-Benutzer werden nun als gesperrte Discourse-Benutzer importiert, ihre Konten bleiben erhalten, ihre Aktivität ist jedoch eingeschränkt. Sperrgründe werden in benutzerdefinierten Feldern gespeichert.
Import von Lesezeichen: Importiert alle Lesezeichen aus XenForo nach Discourse. Es gab ohnehin nicht viele.
Ein großer Teil der Benutzer war nach der Migration nicht glücklich. Das ist zu erwarten. Das ist nichts Neues, das man nach einer Migration hört. Dennoch werde ich später in diesem Thema eine Zusammenfassung des Feedbacks teilen. Möglicherweise gibt es einige Denkanstöße für die Zukunft von Discourse.

