Problemas al importar archivos adjuntos desde XenForo

Hola chicos,

He migrado con éxito la base de datos de XenForo con 1500 miembros y aproximadamente 75.000 publicaciones a un nuevo servidor donde está instalado Discourse.

Una pregunta sobre los archivos adjuntos: según el script, si existe la carpeta de archivos adjuntos, el script realizará la importación. Mi pregunta es: ¿dónde debo colocar los archivos adjuntos del servidor antiguo?

a) En la parte de Docker del servidor (en algún lugar)
b) En la ubicación original /var/discourse/shared/standalone/tmp/attachments

¿?

¿Alguien conoce la ruta???

Coloca los archivos donde desees, siempre que sean accesibles desde la máquina que realiza la importación, y coloca esa ruta aquí:

  ATTACHMENT_DIR = '/tmp/attachments'

Si estás ejecutando dentro de un contenedor Docker y los colocas en var/discourse/shared/standalone/tmp/attachments, entonces usarías /shared/tmp/attachments como ruta. Puedes verificarlo buscando los archivos cuando estés dentro del contenedor.

De acuerdo, Jay, gracias por la información. Esta vez estoy haciendo una instalación limpia con la configuración de la carpeta de adjuntos; los colocaré en /shared/tmp/attachments y volveré aquí con los resultados.

Una pregunta rápida… ¿hay alguna forma de importar la contraseña para las cuentas también?

¿Alguien puede ver dónde está el problema?

root@my-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...

creando usuarios
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 100 usuarios ya importados
Omitiendo 4 usuarios ya importados

importando categorías...
       23 / 23 (100.0%)  [326682 elementos/min]
creando temas y publicaciones
       74 / 74752 (  0.1%)  [99817 elementos/min]  Traceback (última llamada en el pasado):
        18: desde script/import_scripts/xenforo.rb:396:in `\u003cmain\u003e'
        17: desde /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: desde script/import_scripts/xenforo.rb:32:in `execute'
        15: desde script/import_scripts/xenforo.rb:174:in `import_posts'
        14: desde /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: desde /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: desde /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: desde script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: desde /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: desde /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: desde /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: desde script/import_scripts/xenforo.rb:186:in `block (2 niveles) en import_posts'
         6: desde script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: desde script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: desde /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: desde /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: desde script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: desde /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': no se puede modificar una cadena congelada (FrozenError)
root@my-app:/var/www/discourse#

Esta vez he colocado los archivos adjuntos en: var/discourse/shared/standalone/tmp/attachments

Lo he encontrado… el problema es que una carpeta que contiene archivos adjuntos para importar DEBE estar dentro de la aplicación Docker en la ruta /var/www/discourse/…/tmp/attachments

Ahora está bien, el script está en marcha y terminará en ~1.5h

edición: Parece que la importación de archivos adjuntos no funciona de nuevo… actualmente estoy al 78% de la importación, y en cada publicación donde teníamos alguna imagen o archivos adjuntos queda [ATTACH]9788[/ATTACH] y el número entre las etiquetas coincide con el número de archivos subidos, así que el siguiente será [ATTACH]9789[/ATTACH]…

Cualquier ayuda con esto será bienvenida :confused:

Si importaste publicaciones antes de configurar correctamente attachment_dir, deberás eliminar todas las publicaciones y comenzar la importación nuevamente.

Desafortunadamente, la importación se ha realizado ahora mismo y no veo en el registro ninguna información sobre los archivos adjuntos.

Si ejecutaste el script de importación y el directorio de archivos adjuntos no existía, se omitieron los archivos adjuntos.

No hice eso… He ejecutado una importación nueva con los archivos adjuntos en su lugar.

No creo que pueda ayudarte aquí. Si tienes un presupuesto, consulta Redirecting…

Este es mi último consejo: estoy bastante seguro de que los archivos adjuntos no están donde el script puede encontrarlos y que necesitarás borrar todo y comenzar de nuevo.

Antes de ejecutar el script nuevamente, desde dentro de la carpeta, debes escribir:

 ls /tmp/attachments

donde /tmp/attachments es lo que hayas puesto en la línea:

  ATTACHMENT_DIR = '/tmp/attachments'

Si no muestra los archivos adjuntos, debes seguir intentando averiguar dónde están.

¿Podrías decirme exactamente dónde colocar los archivos adjuntos de XenForo en el nuevo servidor para estar seguro de que el script los encontrará?

¿Alguien?

Estoy haciendo ahora una importación nueva (la 5ª vez)… Estoy cansado… :roll_eyes:

¿Necesito ordenar los archivos adjuntos de Xenforo de alguna manera o simplemente copiar/pegar la estructura y /tmp/attachments?

Ahora estoy realizando la instalación en una nueva máquina virtual con una instantánea para poder cambiar rápidamente los detalles y comenzar de nuevo con la migración.

Ayer coloqué la carpeta de archivos adjuntos de Xenforo, que tiene una estructura como la siguiente: una carpeta principal llamada “attachments” y dentro de ella 9 subcarpetas con nombres del 0 al 9, y dentro de cada una hay alrededor de 600-700 archivos adjuntos (.jpg). Puse la carpeta en var/discourse/shared/standalone/tmp/attachments y modifiqué el script xenforo.rb para incluir:

ATTACHMENT_DIR = '/shared/tmp/attachments'

Probé con “ls /tmp/attachments” y obtuve la estructura correcta, pero enfrento el mismo error que la primera vez:

creating topics and posts
74 / 74752 ( 0.1%) [99817 items/min] Traceback (most recent call last):
18: from script/import_scripts/xenforo.rb:396:in \u003cmain\u003e' 17: from /var/www/discourse/script/import_scripts/base.rb:47:in perform’
16: from script/import_scripts/xenforo.rb:32:in execute' 15: from script/import_scripts/xenforo.rb:174:in import_posts’
14: from /var/www/discourse/script/import_scripts/base.rb:869:in batches' 13: from /var/www/discourse/script/import_scripts/base.rb:869:in loop’
12: from /var/www/discourse/script/import_scripts/base.rb:870:in block in batches' 11: from script/import_scripts/xenforo.rb:180:in block in import_posts’
10: from /var/www/discourse/script/import_scripts/base.rb:490:in create_posts' 9: from /var/www/discourse/script/import_scripts/base.rb:490:in each’
8: from /var/www/discourse/script/import_scripts/base.rb:491:in block in create_posts' 7: from script/import_scripts/xenforo.rb:186:in block (2 levels) in import_posts’
6: from script/import_scripts/xenforo.rb:315:in process_xenforo_post' 5: from script/import_scripts/xenforo.rb:324:in process_xf_attachments’
4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each' 3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each_key’
2: from script/import_scripts/xenforo.rb:326:in block in process_xf_attachments' 1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in squish!’
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in gsub!': can't modify frozen String (FrozenError) root@my-app:/var/www/discourse#Texto preformateado`

2019-11-15T23:00:00Z

Eliminé el ! de la cadena gsub! en la ubicación:

/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb

Ahora, el script de importación no se detiene, sino que continúa y muestra esta información sobre los archivos adjuntos:

De todos modos, por ejemplo, la última línea:

Could not find file /shared/tmp/attachments//2/2485-c3da9f6ee1e33d3ebf418c5dea1f9e8a.data. Skipping attachment id 2485

…el archivo SÍ está en esa ruta, pero no hay .data. En su lugar, hay .JPG.

Cualquier ayuda es bienvenida.

2019-11-15T23:00:00Z

El script tenía un error; lo encontré y lo solucioné. Ahora he logrado importar los archivos adjuntos.