Hemos migrado con éxito nuestra comunidad (techenclave.com) de XenForo a Discourse.
Total de Publicaciones: 2.5 millones
Total de Usuarios: 79K (activos y baneados)
Total de Mensajes Privados: 0.7 millones
Es una comunidad de 20 años, por lo que ha pasado por su parte de migraciones desde Proboards, Vbulletin, IPB, Xenforo y ahora Discourse.
Nos tomó 4 días completar la migración. Pero tuvo 4 semanas de pre-trabajo de migración y 4 semanas de desarrollo de plugins personalizados antes de eso.
Gracias a todos por ayudar y guiar donde nos atascamos. ![]()
En general, fue una migración muy exitosa con casi ningún dato útil dejado atrás.
El núcleo de nuestra migración se construyó sobre un script de importación de XenForo mejorado, que mejora significativamente una base estándar. También aprovechamos varios scripts de soporte especializados para manejar transformaciones de datos específicas y garantizar la integridad de los datos después de la importación.
Mejoras Clave en el Script Principal de Importación de XenForo
Optimización del Rendimiento (Paginación Keyset): La mejora más crítica es la adopción de la paginación keyset (WHERE id > last_id). Este método mejora drásticamente la velocidad de procesamiento por lotes en comparación con las consultas OFFSET tradicionales, especialmente en grandes conjuntos de datos, al utilizar claves primarias indexadas para obtener el siguiente conjunto de registros.
Checkpointing y Reanudación Robustos: Se implementó una lógica avanzada de checkpointing (usando archivos .json) para usuarios, temas, respuestas y mensajes privados. Esto permite que el proceso de importación se reanude de forma segura desde el último registro importado con éxito después de interrupciones (por ejemplo, reinicios del servidor, errores de script), ahorrando un tiempo considerable.
Estrategia de Importación de Publicaciones en Dos Pasadas: Las publicaciones ahora se importan en dos pasadas distintas:
Temas Primero: Se importan todos los hilos originales de XenForo (primeras publicaciones), asegurando que existan los temas principales antes que las respuestas.
Respuestas Segundo: Luego se importan las publicaciones subsiguientes dentro de los hilos, vinculándolas correctamente a sus temas de Discourse recién creados. Este enfoque estructurado minimiza las respuestas huérfanas y mejora la consistencia de los datos.
Importación Integral de Reacciones/Me Gusta:
El script ahora diferencia inteligentemente entre las reacciones de XenForo que se mapean directamente a los “Me Gusta” principales de Discourse (corazones) y aquellas que son reacciones personalizadas.
Admite la inserción masiva tanto de los “Me Gusta” principales (en la tabla post_actions) como de las reacciones personalizadas (aprovechando el plugin discourse-reactions), lo que acelera significativamente el proceso.
Incluye un mapeo de los nombres cortos de emojis de XenForo a sus equivalentes en Discourse (por ejemplo, thumbsup a +1, heart_eyes a heart).
Importación Enriquecida de Datos del Marketplace (Plugin Personalizado):
Se agregó una sección dedicada para importar datos detallados de listados del marketplace (por ejemplo, precio, ubicación, condición, garantía, opciones de pago) de la tabla thread_field_value de XenForo.
Estos datos se almacenan en un modelo personalizado TecencMarket::Listing y como campos personalizados de tema, lo que permite una visualización y funcionalidad más ricas en Discourse.
Importación de Comentarios del Marketplace (Plugin Personalizado):
Se introdujo una nueva función para migrar los comentarios/calificaciones de los usuarios (me gusta/no me gusta) asociados con las transacciones del marketplace.
Conversión de Prefijos de Hilo a Etiquetas: El script ahora convierte automáticamente los prefijos de hilo de XenForo en etiquetas de Discourse. Esto es crucial para mantener la organización y la descubribilidad del contenido, utilizando el plugin discourse-tagging. También mapea correctamente los IDs de prefijo a títulos legibles utilizando la tabla phrase de XenForo.
Procesamiento Mejorado del Contenido de las Publicaciones: Este método recibió actualizaciones significativas para una mejor conversión de Markdown y el manejo del complejo BBCode de XenForo:
Manejo Mejorado de Citas: Conversión de las etiquetas [QUOTE] de XenForo, incluido el manejo de usuarios citados y la vinculación a publicaciones/temas de Discourse específicos cuando sea posible.
Incrustaciones de Medios Corregidas: Asegura que todos los medios importados (YouTube, Twitter/X) estén en sus propias líneas para habilitar la función de oneboxing/incrustación de Discourse, y convierte las antiguas etiquetas [MEDIA] de BBCode a URLs estándar.
Conversión de Tablas: Convierte el BBCode [TABLE] de XenForo en tablas de Markdown.
Manejo de Archivos Adjuntos (En Línea y Añadidos): La lógica de procesamiento de archivos adjuntos fue refactorizada. Ahora intenta reemplazar las etiquetas [ATTACH] con el Markdown correcto para el archivo cargado. Crucialmente, cualquier archivo adjunto que no estuviera explícitamente etiquetado como [ATTACH] en el contenido de la publicación ahora se añade al final de la publicación bajo un encabezado claro “Archivos adjuntos:”, asegurando que no se pierdan archivos.
Conversión de Emojis/Sonrisas: Mapeo ampliado de las sonrisas de XenForo a emojis nativos de Discourse, mejorando la consistencia visual.
Limpieza General de BBCode: Eliminación y conversión más completa de varias etiquetas de BBCode (por ejemplo, [B], [I], [URL], [IMG], [LIST], [CODE], [COLOR], [FONT], [SIZE], [INDENT], [USER]).
Codificación y Limpieza de Caracteres: Incluye .scrub! para secuencias UTF-8 inválidas y CGI.unescapeHTML para la decodificación adecuada de entidades HTML.
Manejo de Usuarios Suspendidos: Los usuarios baneados de XenForo ahora se importan como usuarios suspendidos de Discourse, conservando sus cuentas pero limitando su actividad, con las razones del baneo conservadas en campos personalizados.
Importación de Marcadores: Importa todos los marcadores de XenForo a Discourse. No había muchos para empezar.
Una gran parte de los usuarios no quedaron contentos después de la migración. Lo cual es esperado. No es algo que no hayan escuchado antes después de una migración. Sin embargo, compartiré un resumen de los comentarios más adelante en este tema, podría haber algo para reflexionar y alimentar el futuro de Discourse.

