¿Es seguro configurar mis niveles de confianza, insignias y otras configuraciones de Discourse antes de la importación? Estoy pensando que este importador simplemente insertará/reemplazará publicaciones/hilos/perfiles. Odiaría configurar todo en los ajustes de Discourse y que esto borrara esas configuraciones, aunque no veo nada en el código relacionado con eso de inmediato.
Sí, pero haz una copia de seguridad. Probablemente necesitarás cambiar cosas y ejecutarlo varias veces, empezando de cero, así que guarda una copia de seguridad de tu configuración sin datos importados.
Inserta. Mayormente no reemplaza nada. Si un usuario existe, no lo cambiará. No usará las categorías que hayas configurado. Si lo ejecutas de nuevo, con una base de datos actualizada de tu sitio antiguo, añadirá nuevos datos, pero no cambiará las cosas que se importaron en ejecuciones anteriores. Esto lo hace mucho más rápido, pero si necesitas cambiar el script por alguna razón, tendrías que eliminarlo todo y empezar de nuevo.
Entonces, dos cosas. Primero, ¿hay alguna forma de hacer que esto funcione más rápido? Estoy en un Linode de 32 CPU con 64 GB de RAM y todavía tarda entre 4 y 5 horas en importar 250.000 publicaciones.
Segundo, ¿importa los archivos adjuntos antes o después de las publicaciones? Porque mirando el script, parece que lo hace después. Es una pena tener que esperar entre 4 y 5 horas solo para descubrir que los archivos adjuntos no se importaron.
En su mayor parte, todo depende de los datos anteriores; el postprocesamiento puede aprovechar las múltiples CPU, pero eso no comienza hasta que hayas terminado, en su mayor parte. Consigue una CPU única que sea más rápida.
Puedes modificar el script para importar solo cargas recientes, pero si no planeas hacer un desarrollo importante, simplemente espera las 5 horas.
Bueno, lo he intentado varias veces y los archivos adjuntos no se importan, y me estoy quedando sin ideas. Espero que alguien pueda ayudarme (gracias @pfaffman por tu aporte hasta ahora).
He colocado los archivos *.data en su estructura de carpetas original de xenforo (es decir, la carpeta ‘attachments’) en /root/attachments dentro del contenedor docker. He actualizado el script de importación a /root/attachments. Puedo ver los archivos en /root/attachments desde la línea de comandos con ls.
He ejecutado el script, y cada vez (después de esperar unas 4-5 horas), todas las publicaciones con archivos adjuntos/fotos muestran el antiguo bbcode de xenforo ([ATTACH]123456[/ATTACH]) y no veo ninguna imagen o archivo adjunto en la instalación de discourse.
¿Qué podría estar haciendo mal? Siento que estoy al 90%, solo me falta algo.
Tendrás que mirar el código. ¿Se está ejecutando el código de adjunto? ¿Tus adjuntos tienen el formato que espera el script?
Si la función de adjunto se ejecuta después de la importación de publicaciones, no necesitas ejecutarlo todo de nuevo, simplemente omitirá las publicaciones (o comentará la importación de publicaciones para que sea un poco más rápido).
Pero hay un montón de cosas que podrían estar mal, desde que no lo hayas configurado correctamente hasta que simplemente no funcione con tu versión de zenforo. Tendrás que mirar el código y añadir alguna salida de depuración para ver qué está pasando.
Bueno, solo para tu información para cualquiera que encuentre este hilo, no pude hacer que los archivos adjuntos funcionaran con este script, sin importar dónde los colocara. En mi opinión, el script necesita trabajo y las instrucciones especialmente necesitan mucho trabajo para ser más claras sobre qué va dónde y cómo.
Hasta entonces, consideraría que este script está roto.
Probablemente funcione para algunas personas con alguna versión y alguna configuración, pero no con la que estás usando. Es sorprendente lo diferente que es cada importación.
¿El script de importación oficial de xenForo está roto ahora?
La importación de usuarios y categorías funciona bien,
Al importar publicaciones con la carpeta de archivos adjuntos se obtienen problemas
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113289 / 146471 ( 77.3%) [3766 items/min] Excepción al crear la publicación 162516. Omitiendo.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113290 / 146471 ( 77.3%) [3766 items/min] Excepción al crear la publicación 162517. Omitiendo.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc
¿Qué versión de Redis tienes?
Conseguí a duras penas que mi comunidad XenForo existente funcionara con Discourse, así que pensé en compartir mi experiencia aquí para ayudar a cualquiera que intente hacer lo mismo. Ten en cuenta que no sé lo que estoy haciendo, así que algunas de mis inferencias pueden ser incorrectas. Pude completar la importación a Discourse con alrededor de un 20% de pérdida de archivos adjuntos. Realmente no puedo explicar por qué, pero el problema parece afectar solo a los últimos 2-3 años de publicaciones en mi foro, mientras que todo lo anterior tuvo una tasa de importación exitosa de alrededor del 95%. Mi única suposición es que tiene algo que ver con el cambio de XF 1.x a XF 2.x.
Cualquiera que intente esto debe saber que este script necesita muchas actualizaciones para funcionar con XF 2.x. Específicamente, las líneas 375-378 no tienen las tablas de base de datos correctas para importar archivos adjuntos de XenForo Media Gallery. Lo solucioné desconectando XFMG del foro y desinstalándolo, ya que solo estaba usando XFMG para duplicar los archivos adjuntos del foro de todos modos.
Si tienes curiosidad, la línea 376 se refiere a la tabla xengallery_media, que obviamente es una referencia a XFMG 1.x, ya que esta tabla ha sido cambiada a xf_mg_media_item en XFMG 2.x. El resto no puedo hacerlo coincidir y sospecho que se necesita código adicional para hacer coincidir los IDs de los archivos adjuntos con las publicaciones.
Terminé comentando la línea 314: s = process_xf_attachments(:gallery, s)
Para que el script no diera error por la tabla SQL faltante.
Así que, con eso hecho, seguí la publicación de @Jack51 en este hilo:
con las siguientes ediciones:
el paso seis necesita la versión de mariadb actualizada. cambia mariadb-server-10.3 a mariadb-server-10.5
el paso siete debería ser service mariadb start en lugar de service mysql start.
Cambié
frozen_string_literal: true
a
frozen_string_literal: false
Ya que obtuve el mismo error que alguien más mencionó en este hilo.
Parece que hubo MUCHA confusión en este hilo sobre dónde colocar los archivos adjuntos para que el script los viera, y admito que yo también tuve algunas dificultades con esto. Para personas completamente nuevas en docker (como yo), sería extremadamente útil señalar que, si bien los dockers son esencialmente una máquina virtual que se ejecuta en tu servidor (por lo que estás tratando con dos sistemas operativos/sistemas de archivos diferentes), hay un espacio compartido para transferir archivos:
/var/discourse/shared/standalone/tmp
este directorio se encuentra en tu máquina host, y los archivos colocados allí aparecerán en:
/shared/tmp
cuando hayas entrado en el contenedor docker. Entonces, asumiendo que mantienes la misma estructura de archivos/carpetas de xenforo, copiarías las carpetas:
internal_data/attachments
a
/var/discourse/shared/standalone/tmp
en tu máquina host, y esa carpeta aparecería en /shared/tmp después de entrar en tu contenedor docker.
A continuación, al editar el script xenforo.rb, cambia:
ATTACHMENT_DIR = '/tmp/attachments'
a
ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'
y tendrás tus archivos adjuntos ubicados en la ubicación correcta. Vale la pena señalar que xenforo también tiene una carpeta data/attachments, pero está llena de archivos .jpg en lugar de los archivos .data que buscas. Vi que alguien cometió este error anteriormente en este hilo, así que pensé que valía la pena señalarlo.
Además, obtuve un error de permisos del script, por lo que es posible que tengas que chmod el directorio:
sudo chmod a+rw -R /shared/tmp/internal_data/
Diría que la mayor pista de que el script no está detectando tus archivos adjuntos es que estará extrañamente silencioso, cuando en realidad debería estar mostrando algún error ocasional:
Por lo tanto, si la importación dura varias horas sin un solo error listado, probablemente no está detectando los archivos adjuntos.
Eso es todo lo que tengo. No me malinterpretes, me alegro de que este script exista, una tasa de éxito del 80% es mejor que nada (tuve una tasa de éxito similar al pasar de vBulletin a XenForo en 2009), y estoy emocionado de trabajar con la plataforma Discourse. Espero que esta publicación ayude a algunas personas y quizás algún día alguien con mejores habilidades que yo pueda actualizar este script para que funcione un poco mejor.
El script de importación actual omitió muchos archivos adjuntos porque no siempre están incrustados en el BBcode de la publicación. He realizado una solicitud de extracción con bastantes mejoras y correcciones. El script ahora ve todos los archivos adjuntos y también importa me gusta, avatares y mensajes privados, y crea permalinks para categorías y temas.
@gerhard Creo que esa PR está en tu plato en este momento, ¿podrías fusionarla cuando tengas tiempo?
Sí, lo noté ayer.
Lo había olvidado por completo. Lo revisaré hoy o la próxima semana.
¿Esto ya está fusionado en el código? Tuve que volver a XenForo por otras razones, pero me gustaría pasar a Discourse cuando este script funcione.
Lo siento, debería haber revisado GitHub, parece que se fusionó el 28 de noviembre.
6 publicaciones se dividieron en un nuevo tema: La constante AVATAR_DIR no se especifica en el script de importación de XenForo
Solo quería hacer un seguimiento y avisar a cualquiera que intente migrar desde Xenforo (que encuentre este hilo a través de Google o lo que sea) que hay un importador en fase de pruebas para el software de foros Flarum aquí:
Interesante, pero sería aún más interesante si tuviéramos un importador sólido de Xenforo a Discourse.
El caballero parece muy seguro de lo que está haciendo y ¡lo aplaudo!
Hice una importación de xenForo recientemente. Hice algunos cambios para agregar algunas funciones, pero ahora no recuerdo cuáles no eran específicos de ese foro.

