Migrar un foro phpBB3 a Discourse

@gerhard: ¿Podría lograr la limpieza de caracteres mal codificados después de la migración utilizando Sidekiq? Soy muy nuevo en Discourse, así que quizás no entiendo cómo funciona.
¿O tal vez un script SQL directamente en MariaDB?

¡Muchas gracias!

¡Claro! También podrías editar cada publicación a mano. Es del orden de 10 veces más fácil hacerlo antes, cuando es posible simplemente empezar de nuevo.

Probé varias cosas para intentar solucionar la codificación en el lado de MariaDB, pero no encontré una solución. Aquí hay un fragmento de código que utilicé para corregir la codificación en una importación en la que estoy trabajando.

    ### Codificación WIN1252
    win_encoded = ''
    begin
      win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
                            invalid: :replace, undef: :replace, replace: ""
                           ).force_encoding('utf-8').scrub
    rescue => e
      puts "\n#{'-'*50}\nWin1252 falló para \n\n#{raw}\n\n"
      win_encoded = ''
    end
1 me gusta

¡Gracias! :slight_smile:

1 me gusta

Fue una experiencia dolorosa. Probé múltiples codificaciones e incluí varias en la publicación para poder compararlas. Esta parecía resolver la mayoría de los problemas la mayor parte del tiempo. Me llevó mucho más tiempo del que hubiera deseado entender .scrub, ya que sin ella terminaba con cadenas que ya no se podían procesar con gsub.

¿Alguien tiene ya una buena solución para importar listas anidadas desde phpBB?

No soy lo suficientemente experto en Ruby para saber cómo abordarlo – estoy aquí, frente a esto

 def process_lists(text)
      # convertir las etiquetas de lista a ul y las etiquetas list=1 a ol
      # list=a no está soportado, así que tratarlo como list=1
      # list=9 y list=x tienen el mismo resultado que list=1 y list=a
      text.gsub!(/\[list\](.*?)\[\/list:u\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "* #{$1}\n" }
      end
      text.gsub!(/\[list=.*?\](.*?)\[\/list:o\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "1. #{$1}\n" }
      end
    end

¿Alguien tiene alguna idea de cómo podría verse “iterar” sobre una lista anidada?

Aquí hay un ejemplo en BBCode

[list]
   [*]
   [list=a]
      [*]a
      [*]b
      [*]c
      [*]d
      [*]e
   [/list]
   [*]lista externa
[/list]
1 me gusta

@helmi

¿Has revisado cómo este plugin oficial de discurso podría ayudarte con las etiquetas LIST?

1 me gusta

No lo he hecho, pero lo haré, gracias. Aunque trato de evitarlo, ya que no quiero soportar etiquetas BB adicionales a largo plazo; realmente preferiría convertir el contenido al importar. Las listas anidadas no son un obstáculo insuperable, pero sería genial tenerlas.

Podrías crear una copia de seguridad, actualizar a phpBB 3.2 y utilizar mi rama experimental. Ofrece un soporte mucho mejor para los BBCodes. :wink:

1 me gusta

Eso suena interesante, pero preferiría no volver a meterme con phpBB. Aparte de las listas, el proceso de importación ya está bastante optimizado. Eso nos haría retroceder y requeriría más trabajo y pruebas. Pero es bueno ver que los avances en 3.2 van muy bien.

Hola @helmi

Sí, hemos estado lidiando con este tipo de problemas durante un mes, migrando un foro heredado de vB3 con casi dos décadas de todo tipo de usos locos de bbcode, anidación, incrustación, etc.

No es trivial lograr que este tipo de migración sea 99,9 % perfecta. Por ejemplo, escribimos código en Ruby para eliminar todas las etiquetas bbcode de nuestras etiquetas de código, ya que Markdown no “tolera” bbcode dentro de bloques de código delimitados.

De nuestro lado, aún estamos finalizando muchas rutinas de preprocesamiento en Ruby y nos estamos acercando cada vez más, pero nunca llegaremos a la “perfección” o al “100 %” con casi dos décadas de publicaciones de usuarios de bbcode muy creativos (sin mencionar a todos esos usuarios que copiaron y pegaron en las publicaciones, etc…)

Seguimos trabajando en la limpieza de problemas relacionados con la conversión de BBCODE a MD.

A veces pienso: “simplemente elimínalo todo”… Jaja

1 me gusta

Parece que todavía estamos teniendo algunos problemas con los nombres de usuario que se modifican o no se importan en absoluto cuando contienen ciertos caracteres especiales.

¿Hay algún problema conocido con el importador o estoy configurando mal la opción de nombres de usuario Unicode en Discourse? La habilité, pero la lista blanca aún contiene vocales con diéresis. ¿Debo eliminar la lista blanca para permitir todos los caracteres Unicode o necesito listar todos los caracteres? Mi idea era que habilitar Unicode permita todos los caracteres Unicode y deshabilitarlo solo permita los de la lista blanca.

Al importar, parece que algunos caracteres como @ o * se reemplazan por _; puedo imaginar que @ podría causar problemas con las menciones con @, pero… solo quería asegurarme antes de que nos encarguemos manualmente de todos esos usuarios antes de importar (lo cual sería un gran inconveniente).

¿Alguna sugerencia al respecto?

Saludos,
Frank

Incluso cuando activas la compatibilidad con Unicode, solo permite letras y números. Consulta Unicode usernames and group names

2 Me gusta

Hola,

En primer lugar, gracias por toda la documentación y la ayuda en este tema.
Acabo de importar un foro antiguo de phpBB3 a uno nuevo de Discourse.

Todo funcionó bastante bien con 200 mil publicaciones y 20 mil archivos adjuntos, pero Sidekiq tuvo un pequeño problema para procesar todo después de la importación.

Ahora me enfrento a un nuevo problema con las etiquetas de imagen que estaban incluidas en etiquetas de URL, así:
[url=http://www.casimages.com][img]http://nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg[/img][/url]

Después de la importación (convirtiendo bbcode a markdown), estas imágenes solo se ven como enlaces:
[nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg](http://www.casimages.com)

¿Existe alguna forma de procesar/reelaborar estos enlaces para que se muestren como imágenes y puedan cargarse automáticamente en S3?

Gracias de antemano por tu ayuda.

Busca en la configuración del sistema “download remote”

EDIT: Ups. Parece que ese no era tu problema. Lo siento.

@pfaffman

Gracias, Jay. Sí, ya habilité la configuración “descargar remoto”. Mi problema es que estas imágenes se muestran como enlaces (y la URL de la imagen es solo “la parte mostrada” del enlace; el destino no coincide con el contenido de una imagen).

1 me gusta

Hola,

Actualmente tengo un foro importado desde phpBB.
Estoy pensando en importar otro foro de phpBB (36.000 mensajes, 230 miembros) dentro de mi instalación existente de Discourse. Comparten categorías y usuarios comunes.

Las cuentas de usuario podrían fusionarse manualmente.
En cuanto a los mensajes, después de la importación se moverían manualmente a las categorías existentes.

¿Funcionaría esto de manera bastante directa con el script de importación o sería un caos?

¿Qué sucede si importo un foro de phpBB y algunos correos electrónicos de usuarios ya existen en mi Discourse actual?

Necesitarás borrar los campos personalizados import_id, de lo contrario, las nuevas publicaciones se considerarán que ya fueron importadas.

Esto suena como algo por lo que deberías esperar tener que hacer muchos ajustes en una instalación local, utilizando una copia de seguridad de tu base de datos principal.

2 Me gusta

Gracias por esta información valiosa que no había considerado :+1:t6:
Sí, lo haré y lo probaré en un servidor de prueba para ver si es viable.

Sobre el contexto:

Alojo un foro nacional de Discourse sobre monociclismo.
También alojo un foro phpBB para una asociación local de monociclistas.
Ambos foros comparten algunos usuarios, y hay temas o sujetos de discusión redundantes. La idea sería fusionar el foro de la asociación local en el foro nacional para eliminar la redundancia de temas y crear un grupo o categoría para los temas relacionados con la asociación local.

Además, las personas que solo están en el foro de la asociación local se unirán al foro nacional de esta manera y quizás aporten más actividad.

¿Alguien tiene una idea de cuál podría ser la razón por la que MySQL no se está ejecutando en el contenedor de importación?

He realizado varias pruebas y siempre funcionó, pero ahora obtengo el siguiente error:

No se puede conectar al servidor MySQL local a través del puerto: 30810

Una vez que intento iniciar la importación, verifiqué todo tres veces y reconstruí el contenedor de importación varias veces. Todo está presente, pero parece que MySQL no se está ejecutando. :frowning:

Estoy un poco horrorizado, ya que hoy es realmente nuestro día de migración a Discourse.

:question: :question::question: Eso parece extraño. ¿De dónde viene?