Migrar un foro vBulletin 4 a Discourse

I know this is a bit of an old topic, but I’ve just completed a comparably sized vb4 migration and am missing a LOT of image attachments, somewhere on the order of 75% of them I’d wager. They are not tombstoned, and all the threads have been rebaked.

Has anyone else dealt with this? How should I go about recovering those images?

Did you see errors when you did the import?

1 me gusta

Yes, quite a few ‘Attachment file doesn’t exist’ errors with some ‘Couldn’t find attachment record for post.id=xxx, import_id=xxx’ sprinkled in.

The thing that has me scratching my head is that these are posts that I know have intact attachments, and that those attachments are in the ATTACHMENT_DIR global directory. The threads with missing images are missing ALL the associated images, which seems… not random.

I’m at a loss to find any common factor among the threads/posts with lost images either.

Those messages were your clue that something was amiss. All you can do is diagnose the problem an run the import again.

Every import is a snowflake. I’ve don’t dozens of them. It’s rare that one just works. If you’d like help: Redirecting…

2 Me gusta

Quería probar Discourse convirtiendo nuestra extensa base de datos de VBulletin, así que decidí probar este script.

Ha importado usuarios y grupos, pero ha fallado un par de veces con las subcategorías.

   importando categorías de nivel superior...
        7 / 7 (100.0%)  [902 elementos/min]   n]
importando categorías hijas...
Traceback (most recent call last):
        5: from script/import_scripts/vbulletin.rb:942:in `<main>'
        4: from /home/peterb/discourse/script/import_scripts/base.rb:47:in `perform'
        3: from script/import_scripts/vbulletin.rb:84:in `execute'
        2: from script/import_scripts/vbulletin.rb:287:in `import_categories'
        1: from script/import_scripts/vbulletin.rb:287:in `each'
script/import_scripts/vbulletin.rb:289:in `block in import_categories': undefined method `[]' for nil:NilClass (NoMethodError)

He revisado varios aspectos como la codificación UTF8, los recursos del servidor, etc., pero ahora no sé qué más verificar.
¿Alguna idea?
Gracias.

Estoy ejecutando una importación de vBulletin de 8 millones de publicaciones en este momento. He añadido soporte para «me gusta» (al parecer, mediante un complemento o modificación) y encuestas.

No puedo determinar con exactitud cuál es el problema a partir del error. Mi suposición es que, de alguna manera, no está encontrando un parentid.

Creo que necesitas arreglar de alguna manera lo siguiente:

    parent_category_id: category_id_from_imported_category_id(category["parentid"])

para que no falle si category['parentid'] es nil.

1 me gusta

Gracias. Lo he vuelto a revisar y parece que los administradores crearon “secciones” de categorías estableciendo el ID de padre en -1… que no existe.

3 Me gusta

Sí. Parece que lo has resuelto. Que cosas así salgan mal es mucho más la norma que la excepción. Luego tienes que decidir si arreglarlo en la base de datos o modificar el código para que funcione con tu base de datos dañada.

3 Me gusta

Es lo habitual en cualquier migración de datos: el script que encuentres nunca cubrirá todas las eventualidades. No ayuda que la única vez que tengo tiempo libre para trabajar en esto sea por la noche (es un trabajo voluntario para mi club de automovilismo). El sitio de vBulletin está bastante personalizado, así que veremos qué otras sorpresas aparecen.

4 Me gusta

Entiendo que existe un script que puede manejar las importaciones de vBulletin 4, pero no veo nada relacionado con la redirección de todas las URLs al nuevo formato de Discourse.

¿Cómo lo gestionan ustedes? ¿Qué sucede con todos los enlaces externos que tienen sus foros?

Aquí está:

3 Me gusta

Gracias @RGJ, pero ¿puedes explicar cómo funciona esto en la vida real? ¿Qué hace exactamente este script? ¿Crea algún tipo de URLs alias (en Discourse) para las URLs actuales/correctas importadas a Discourse?

¿Cómo recomendarías mover un dominio antiguo de vBulletin (www.example1.com) a un nuevo dominio en Discourse (www.example2.com)?

Creo que, de alguna manera, lo ideal sería que el dominio del foro antiguo redirija todo el tráfico/enlaces entrantes al nuevo dominio basándose en una lista de reescrituras 301. ¿Cómo recomendarías crear una lista de reescrituras de redirección?

No necesitas cambiar de dominio, pero si lo haces, el proceso consta de dos pasos.

  1. Redirige TODO desde el dominio antiguo al nuevo.
  2. Los enlaces permanentes de Discourse convertirán las URLs con estilo de vBulletin a los temas correctos de Discourse.

Si no cambias de dominio y simplemente lo apuntas a la nueva configuración de Discourse, solo tendrás que hacer el paso #2.

1 me gusta

¿Cómo funcionan las cabeceras de redirección HTTP de Discourse, 301 o 302?

Me interesa desde la perspectiva del SEO si un cambio de dominio afectará los posicionamientos.

301 Moved Permanently

La palabra permalink lo dice todo :slight_smile:

1 me gusta

Puedes verlo por ti mismo si visitas /admin/customize/permalinks y creas un enlace permanente para ver cómo funciona.

Tengo un problema con que los archivos adjuntos no se importan completamente, similar a lo que se ha mencionado antes, pero el script no muestra ningún error.
La base de datos es pequeña (71 MB) y toda la importación se completa en 0 minutos y 23 segundos.


La mayoría de los archivos adjuntos faltan en las publicaciones.
Ejecuté las consultas SQL directamente en mi base de datos vb4, tal como están en el script, y devuelven los datos correctos, así que en este momento no sé dónde está el problema…

¿Acaso los archivos adjuntos que faltan no están enlazados directamente en las publicaciones? Creo que el script solo extrae las imágenes que se mencionan en las publicaciones, no las que simplemente están adjuntas a ellas.

Tengo un script que importa esos archivos, pero aún no he logrado enviar una solicitud de extracción (PR).

Sí, creo que tienes razón, @pfaffman, así es.
¡Estaré esperando ese script cuando lo subas!

Si tienes un presupuesto, házmelo saber. Tengo la intención de enviar una versión después de terminar esta importación, pero necesito eliminar una cantidad considerable de código que solo sirve para esta importación, por lo que no ocurrió hace un año…

1 me gusta