Abbiamo migrato con successo la nostra community (techenclave.com) da XenForo a Discourse.
Post totali: 2,5 milioni
Utenti totali: 79K (attivi e bannati)
Messaggi privati totali: 0,7 milioni
È una community di 20 anni, quindi ha visto la sua buona dose di migrazioni da Proboards, Vbulletin, IPB, Xenforo e ora Discourse.
Ci sono voluti 4 giorni per completare la migrazione. Ma ha richiesto 4 settimane di pre-lavoro di migrazione e 4 settimane di sviluppo di plugin personalizzati prima di ciò.
Grazie a tutti per l’aiuto e la guida ogni volta che ci siamo bloccati. ![]()
Nel complesso è stata una migrazione di grande successo con quasi nessun dato utile lasciato indietro.
Il nucleo della nostra migrazione è stato costruito su uno script di importazione XenForo potenziato, migliorando significativamente una base standard. Abbiamo anche sfruttato diversi script di supporto specializzati per gestire trasformazioni di dati specifiche e garantire l’integrità dei dati post-importazione.
Principali miglioramenti nello script di importazione XenForo principale
Ottimizzazione delle prestazioni (Paginazione Keyset): Il miglioramento più critico è l’adozione della paginazione keyset (WHERE id > last_id). Questo metodo migliora drasticamente la velocità di elaborazione batch rispetto alle tradizionali query OFFSET, specialmente su grandi set di dati, utilizzando chiavi primarie indicizzate per recuperare il set successivo di record.
Checkpointing e Ripresa robusti: È stata implementata una logica avanzata di checkpointing (utilizzando file .json) per utenti, argomenti, risposte e messaggi privati. Ciò consente al processo di importazione di riprendere in sicurezza dall’ultimo record importato con successo dopo interruzioni (ad es. riavvii del server, errori dello script), risparmiando tempo significativo.
Strategia di importazione post in due passaggi: I post vengono ora importati in due passaggi distinti:
Argomenti prima: vengono importati tutti i thread XenForo originali (primi post), assicurando che gli argomenti padre esistano prima delle risposte.
Risposte poi: vengono quindi importati i post successivi all’interno dei thread, collegandoli correttamente ai loro argomenti Discourse appena creati. Questo approccio strutturato riduce al minimo le risposte orfane e migliora la coerenza dei dati.
Importazione completa di reazioni/mi piace:
Lo script ora differenzia in modo intelligente tra le reazioni XenForo che vengono mappate direttamente ai “Mi piace” (cuori) principali di Discourse e quelle che sono reazioni personalizzate.
Supporta l’inserimento in blocco sia dei mi piace principali (nella tabella post_actions) sia delle reazioni personalizzate (sfruttando il plugin discourse-reactions), accelerando significativamente il processo.
Include una mappatura dei codici brevi delle emoji XenForo con i loro equivalenti in Discourse (ad es. thumbsup a +1, heart_eyes a heart).
Importazione di dati arricchiti del marketplace (Plugin personalizzato):
È stata aggiunta una sezione dedicata per importare dati dettagliati delle inserzioni del marketplace (ad es. prezzo, posizione, condizione, garanzia, opzioni di pagamento) dalla tabella thread_field_value di XenForo.
Questi dati vengono archiviati in un modello personalizzato TecencMarket::Listing e come campi personalizzati dell’argomento, abilitando una visualizzazione e funzionalità più ricche su Discourse.
Importazione di feedback del marketplace (Plugin personalizzato):
È stata introdotta una nuova funzione per migrare il feedback/valutazioni degli utenti (mi piace/non mi piace) associati alle transazioni del marketplace.
Conversione da prefissi di thread a tag: Lo script ora converte automaticamente i prefissi dei thread di XenForo in tag Discourse. Questo è fondamentale per mantenere l’organizzazione e la reperibilità dei contenuti, utilizzando il plugin discourse-tagging. Mappa anche correttamente gli ID dei prefissi ai titoli leggibili utilizzando la tabella phrase di XenForo.
Elaborazione migliorata del contenuto dei post: Questo metodo ha ricevuto aggiornamenti significativi per una migliore conversione Markdown e la gestione del complesso BBCode di XenForo:
Gestione migliorata delle citazioni: Conversione dei tag [QUOTE] di XenForo, inclusa la gestione degli utenti citati e il collegamento a specifici post/argomenti Discourse quando possibile.
Incorporamenti multimediali corretti: Assicura che tutti i media importati (YouTube, Twitter/X) siano sulle loro righe separate per abilitare la funzionalità di oneboxing/incorporamento di Discourse e converte i vecchi tag BBCode [MEDIA] in URL standard.
Conversione tabelle: Converte il BBCode [TABLE] di XenForo in tabelle Markdown.
Gestione allegati (inline e aggiunti): La logica di elaborazione degli allegati è stata rifatta. Ora tenta di sostituire i tag [ATTACH] con il Markdown corretto per il file caricato. Fondamentalmente, tutti gli allegati che non erano esplicitamente contrassegnati con [ATTACH] nel contenuto del post vengono ora aggiunti alla fine del post sotto un’intestazione chiara “Allegati:”, assicurando che nessun file venga perso.
Conversione emoji/smiley: Mappatura ampliata degli smiley XenForo a emoji native di Discourse, migliorando la coerenza visiva.
Pulizia generale del BBCode: Rimozione e conversione più complete di vari tag BBCode (ad es. [B], [I], [URL], [IMG], [LIST], [CODE], [COLOR], [FONT], [SIZE], [INDENT], [USER]).
Codifica caratteri e pulizia: Include .scrub! per sequenze UTF-8 non valide e CGI.unescapeHTML per una corretta decodifica delle entità HTML.
Gestione utenti sospesi: Gli utenti XenForo bannati vengono ora importati come utenti Discourse sospesi, mantenendo i loro account ma limitando la loro attività, con i motivi del ban conservati nei campi personalizzati.
Importazione segnalibri: Importa tutti i segnalibri da XenForo a Discourse. Non ce n’erano molti all’inizio.
Una grande parte degli utenti non era contenta dopo la migrazione. Il che è prevedibile. Non è qualcosa che non avete sentito prima dopo una migrazione. Ciononostante, condividerò un riepilogo del feedback più tardi in questo argomento, potrebbero esserci spunti interessanti da integrare nel futuro di Discourse.

