Migrar un foro phpBB3 a Discourse

Eso es bastante típico.

Creo que los cambios que sugieres probablemente no romperán ninguna otra importación. A menudo hay un conjunto de cambios como estos y luego un montón de otros cambios que son específicos de la importación y averiguar cuáles son cuáles y volver a probar solo con esos sería mucho trabajo, por lo que no se crea una PR.

¡Me alegra que lo hayas conseguido!

3 Me gusta

Gracias Constanza, enlace muy útil. :+1:


Gracias por la información Jay. Haré una PR más tarde después de terminar con la migración si puede ayudar a tener una herramienta de migración de phpBB3 aún mejor.

El script actual también ignora las etiquetas [size=XXX] que encontré durante otras migraciones.
En mi migración actual, hice un script rápido en mi importador y usé el valor de XXX para reemplazar estas etiquetas con \u003csmall\u003econtenido\u003c/small\u003e y \u003cbig\u003econtenido\u003c/big\u003e ya que son compatibles con Discourse.
Pero ese fue un deseo personal y podría ser una solución más adecuada (en general) simplemente deshacerse de estas etiquetas [size], como el script de importación ya hace con las etiquetas [color].

4 Me gusta

Gracias @Canapin por todos tus comentarios. ¡Un PR es definitivamente bienvenido!

Además, un pequeño adelanto: Estamos trabajando en una solución que debería hacer que todas las importaciones, no solo las de phpBB, sean mucho mejores, más rápidas, más fáciles de personalizar y deshacerse de esos molestos problemas con la conversión de BBCode… :wink:

4 Me gusta

Al importar mis publicaciones, obtuve varios de estos errores (no para todas las publicaciones):

   251491 / 251672 ( 99.9%)  [14140 items/min]  Excepción al crear la publicación 354629. Omitiendo.
undefined method `[]' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:66:in `block in map_first_post'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `try'
/var/www/discourse/script/import_scripts/base.rb:576:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:523:in `block in create_posts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:510:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:192:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:873:in `loop'
/var/www/discourse/script/import_scripts/base.rb:873:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:254:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:188:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:38:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'

Pero no pude averiguar qué causa esto.

¿Alguna pista?

¿Cómo puedo comprobar si realmente me faltan publicaciones? No pude encontrar cómo mostrar los datos (contenido de la publicación, por ejemplo) correspondientes a “Excepción al crear la publicación 354629”.

No recuerdo haber tenido este error en mis otras pruebas de importación de los días anteriores, pero tal vez simplemente no presté atención… ¿Podría estar relacionado con este problema conocido?

251490 / 251672 ( 99.9%)  [14140 items/min]  La publicación principal 337703 no existe. Omitiendo 354628: vw-camper est malade !?

Ejecuté el script de importación dos veces, como debería ser, en relación con este problema en particular.

1 me gusta

Asegúrate de establecer tag_mappings: {} en tu archivo settings.yml si no estás utilizando esta función.

3 Me gusta

¡Me siento tonto! Incluso lo pensé, pero estaba tan seguro de que no me había encontrado con este error antes que no lo intenté… :facepalm:

Resolvió el problema, muchas gracias.


Supongo que no puedes decir mucho en este momento, pero ¿alguna pista sobre cómo funcionará y cuándo se podrán utilizar algunos scripts de importación utilizables con esta nueva cosa?
Podría migrar otro phpBB este año, así que podría ser muy interesante para mí saber un poco más. :slight_smile:

1 me gusta

Hola, estoy probando una migración de phpbb 3.2 a Discourse para un foro de tamaño considerable (30k temas / 600k publicaciones) y casi todo funciona bien, aparte de un par de temas no importados (“La publicación principal xx no existe”), no resueltos con múltiples ejecuciones, pero no es un problema.
Mi principal problema es que las importaciones posteriores con datos nuevos (verificados con el sha256sum en el archivo import/mysql/imported) no importan publicaciones nuevas en Discourse. Me enfrento a una excepción al principio del proceso, no sé si está relacionada:

No se pudo mapear la publicación con ID 6815

El valor BIGINT UNSIGNED está fuera de rango en '(`phpbb_prod`.`o`.`poll_option_total` - (select count(distinct `phpbb_prod`.`v`.`vote_user_id`) from `phpbb_prod`.`phpbb3_poll_votes` `v` join `phpbb_prod`.`phpbb3_users` `u` join `phpbb_prod`.`phpbb3_topics` `t` where ((`phpbb_prod`.`u`.`user_id` = `phpbb_prod`.`v`.`vote_user_id`) and (`phpbb_prod`.`v`.`topic_id` = `phpbb_prod`.`t`.`topic_id`) and (`phpbb_prod`.`v`.`poll_option_id` = `phpbb_prod`.`o`.`poll_option_id`) and (`phpbb_prod`.`t`.`topic_id` = `phpbb_prod

¿Es esto un problema con las encuestas incrustadas en las publicaciones, según lo que se muestra en SQL?

¡Que tengas un buen día!

2 Me gusta

Todavía no puedo decir mucho ya que todavía está en desarrollo. Los planes pueden cambiar… Pero “este año” es una buena apuesta. :wink:

2 Me gusta

El valor BIGINT UNSIGNED está fuera de rango

¿Hay tantos votos anónimos en esta encuesta?

Necesitarás modificar este SQL:

¿Algo como esto tal vez? https://stackoverflow.com/a/11704174/451338
Por favor, házmelo saber cuando hayas encontrado una solución o crea un PR con una corrección. Lo agradecería.

3 Me gusta

Las encuestas son desde el principio del foro, no estaba a cargo en ese momento, pero creo que a los usuarios anónimos nunca se les permitió publicar/responder encuestas.

Con

 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

Puedo consultar todos los votos de las encuestas, y para 2 de ellas, tengo “votos anónimos” negativos. Parece que este foro de alguna manera permitió la votación anónima, en realidad :slight_smile:

Gracias @gerhard por el consejo, voy a investigar más…

4 Me gusta

Actualmente estoy investigando la migración de un foro phpBB a Discourse. El problema es que nuestro phpBB utiliza Postgres en lugar de MySQL, por lo que me gustaría adaptar el script para que funcione también con él.

¿Alguien podría darme algunas indicaciones sobre la mejor manera de abordar esto? Ya que, idealmente, me gustaría que todos se beneficiaran de este trabajo, así que me gustaría que utilizara un enfoque aceptado por el upstream en lugar de simplemente hackearlo rápidamente para que funcione.

Por lo que puedo ver, parece ser principalmente una cuestión de agregar las sentencias SQL adecuadas para el esquema de PostgreSQL utilizando el adaptador de base de datos correcto, sin embargo, no estoy seguro de cómo adaptar toda la orquestación del contenedor Docker para iniciar correctamente una instancia de PostgreSQL, si es necesaria por el tipo de base de datos especificado en la configuración, para importar el volcado de la base de datos y ejecutar las sentencias contra ella.

2 Me gusta

Hay un script de importación masiva para phpBB que se ejecuta en postgresql. ¿Lo viste? discourse/script/bulk_import/phpbb_postgresql.rb at main · discourse/discourse · GitHub

Sin embargo, no creo que se haya utilizado recientemente, por lo que probablemente esté roto y podría no funcionar con las versiones actuales de phpBB porque el formato de almacenamiento de Markdown cambió.

:+1:

Elijas el camino que elijas, no dedicaría demasiado tiempo a perfeccionar tu solución a menos que realmente quieras hacerlo. Los scripts de importación actuales serán obsoletos en algún momento de este año…

2 Me gusta

¡Gracias, no estaba al tanto! Y gracias por el aviso de que los scripts van a ser obsoletos, así que supongo que no valdrá la pena incluir una característica tan importante para ellos si de todos modos van a ser obsoletos pronto. ¿Hay un reemplazo planeado para ellos?

1 me gusta

Sí, por supuesto que habrá un reemplazo.

3 Me gusta

Otra cosa importante que me preguntaba, ¿necesito configurar algo más que disable_edit_notifications para asegurarme de que ninguno de los usuarios importados reciba correos electrónicos de Discourse por nada de lo que importe? Como actualmente la instancia no es pública y solo estamos experimentando con la importación y probablemente necesitaremos varios intentos hasta que sea lo suficientemente buena, quiero evitar que se envíen correos electrónicos.

1 me gusta

Estás buscando la configuración del sitio disable_emails

4 Me gusta

Mientras que [b]texto[/b] se admite en línea en Discourse, no se interpreta para bloques de texto que tienen saltos de línea.

[b]Por ejemplo, si tengo este texto en mi publicación…

Y continúo mi línea después de una línea vacía, cierro el bbcode y el texto no se convertirá en texto en negrita[/b]

Lo mismo ocurre con [i] y probablemente con otras etiquetas.

No encuentro una solución limpia para esto en mi importación. ¿Alguna idea? :man_shrugging:

2 Me gusta

Esta no es una solución ideal, pero tengo una idea para un plan B o C al menos.

Después de la importación, podrías reasignar [b] a <b> y [/b] a </b> ya que <b> funciona en bloque aquí

test

test

<b>test

test</b>

Pero en un foro grande, llevará tiempo :confused:

3 Me gusta

¡Buena idea!

Mi foro aún no está importado, así que todavía puedo trabajar en el importador.

¿No tendrían más sentido <strong> y <em>, a pesar de su “propiedad” semántica?

2 Me gusta

¡Esa es una gran noticia!

Creo que es algo bueno que intentar primero.

2 Me gusta