Migrar un foro phpBB3 a Discourse

Tuve el mismo error. Creo que ocurre cuando se obtiene un archivo shared/standalone/import/mysql/imported desactualizado. Eliminar ese archivo solucionó el error.

2 Me gusta

La migración de contraseñas aparentemente no funcionó para mí.

Configuré passwords: true en shared/standalone/import/settings.yml antes de importar desde un volcado de phpBB 3.0. Esto es lo que tengo en containers/app.yml:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discoursehosting/discourse-migratepassword.git

Y ejecuté ./launcher rebuild app después de la importación. La importación parece haber funcionado por completo, excepto que no puedo iniciar sesión con mi contraseña de phpBB. No hubo mensajes de error relevantes que yo pudiera detectar durante la importación, y la contraseña tiene 20 caracteres, por lo que debería superar el límite mínimo de longitud.

¿En qué debería fijarme para solucionar el problema?

Un poco más de información: veo entradas import_pass en la tabla user_custom_fields de la base de datos que coinciden con los hashes de contraseña que estaban en la base de datos de phpBB, ¿así que esa parte parece haber funcionado?

Edición: ¡Oh, ya sé qué pasó! Había olvidado por completo que habíamos cambiado a la autenticación LDAP para phpBB… ¡Las contraseñas que importé estaban perfectamente bien, solo tenían 15 años! Así que ahora necesito armar algo para extraer los hashes de contraseña de LDAP en su lugar… :slight_smile:

1 me gusta

¡Hola a todos!

¿Alguien ha realizado una importación con archivos adjuntos recientemente?

Los usuarios y las publicaciones funcionan perfectamente, pero los archivos adjuntos no se agregan a las publicaciones.

Todavía tengo el código BB en algunas publicaciones:

Lo extraño es que el contenido de la carpeta de archivos se transfiere a la carpeta de cargas de Discourse.

Primero, pensé que era porque la versión 3.0.12 de phpBB era demasiado antigua, pero actualicé phpBB a la versión 3.0.14, limpié Discourse y la carpeta de cargas, e intenté la importación de nuevo. Sin éxito.

Actualicé la versión de phpBB a 3.2.0 (después de ejecutar su kit de herramientas de soporte para limpiar la base de datos de los módulos) en un servidor de prueba, pero sigue sin funcionar.

Antes de investigar más a fondo mi base de datos, quería asegurarme de que el script funcione para todos.

No creo que haya cometido un error en mi archivo de configuración, pero tal vez una mirada fresca pueda ayudar.

# Este es un archivo de configuración de ejemplo para el importador de phpBB3.

database:
  type: MySQL # actualmente solo se admite MySQL
  host: localhost
  port: 3306
  username: root
  password:
  schema: phpbb
  table_prefix: phpbb_ # Cambia esto si tu foro utiliza un prefijo diferente. Por lo general, todos los nombres de tabla comienzan con phpbb_
  batch_size: 1000 # No cambies esto a menos que sepas lo que estás haciendo. El valor predeterminado (1000) debería funcionar perfectamente.

import:
  # Establece esto si importas varios foros phpBB en un solo foro de Discourse.
  #
  # Por ejemplo, al importar varios sitios, antepón 'first' a todos los IDs importados
  # para evitar conflictos. Las ejecuciones posteriores de importación deben tener un
  # 'site_name' diferente.
  #
  # site_name: first
  #
  site_name:

  # Crear nuevas categorías
  #
  # Por ejemplo, para crear una categoría principal y una subcategoría.
  #
  # new_categories:
  # - forum_id: foo
  #   name: Categoría Foo
  # - forum_id: bar
  #   name: Categoría Bar
  #   parent_id: foo
  #
  new_categories: []

  # Mapeo de categorías
  #
  # Por ejemplo, los temas de las categorías 1 y 2 de phpBB se importarán
  # en la nueva categoría "Categoría Foo", los temas de la categoría 3 de phpBB
  # se importarán en la subcategoría "Categoría Bar", los temas de la categoría 4 de phpBB
  # se fusionarán en la categoría 5 y la categoría 6 se omitirá.
  #
  # category_mappings:
  #   1: foo
  #   2: foo
  #   3: bar
  #   4: 5
  #   6: SKIP
  #
  category_mappings: {}

  # Mapeo de etiquetas
  #
  # Por ejemplo, los temas importados de la categoría 1 de phpBB se etiquetarán
  # con 'first-category', etc.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings:

  # Mapeo de rangos a niveles de confianza
  #
  # Mapea los niveles de rango de phpBB 3.x al nivel de confianza
  # Los usuarios con un rango de al menos 3000 tendrán TL3, etc.
  #
  # rank_mapping:
  #   trust_level_1: 200
  #   trust_level_2: 1000
  #   trust_level_3: 3000
  #
  rank_mapping:

  # ADVERTENCIA: No actives esta opción a menos que sepas lo que estás haciendo.
  # Probablemente romperá la conversión de BBCode a Markdown y ralentizará tu importación.
  use_bbcode_to_md: false

  # Esta es la ruta al directorio raíz de tu instalación actual de phpBB (o una copia de ella).
  # El importador espera encontrar los directorios /files y /images dentro del directorio base.
  # Debes cambiar esto a algo como /var/www/phpbb si no estás usando el importador basado en Docker.
  # Esto solo es necesario si deseas importar avatares, archivos adjuntos o caritas personalizadas.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # esto es necesario para reescribir los enlaces internos en las publicaciones
    original: ***.com   # sin http(s)://
    new: https://****.org       # con http:// o https://

  # Activa esto si quieres redirigir los enlaces antiguos del foro a las nuevas ubicaciones.
  permalinks:
    categories: true  # redirige   /viewforum.php?f=1            a  /c/nombre-categoria
    topics: true      # redirige   /viewtopic.php?f=6&t=43       a  /t/nombre-tema/81
    posts: false      # redirige   /viewtopic.php?p=2455#p2455   a  /t/nombre-tema/81/4
    # Añade un prefijo a cada tipo de enlace, por ejemplo, 'forum' para redirigir /forum/viewtopic.php?f=6&t=43 a /t/nombre-tema/81
    # Déjalo vacío si tu foro no se instaló en una subcarpeta.
    prefix:

  avatars:
    uploaded: true  # importar avatares subidos
    gallery: false   # importar los avatares predefinidos que ofrece phpBB
    remote: false   # ADVERTENCIA: Esto puede ralentizar considerablemente tu importación. Intentará descargar avatares remotos.

  # Cuando es true: los usuarios anónimos se importan como usuarios suspendidos. No pueden iniciar sesión y no tienen dirección de correo electrónico.
  # Cuando es false: se usará el usuario del sistema para todos los usuarios anónimos.
  anonymous_users: true

  # Activa esto si quieres importar hashes de contraseñas para usar el plugin "migratepassword".
  # Esto permitirá a los usuarios iniciar sesión con su contraseña actual.
  # El plugin está disponible en: https://github.com/discoursehosting/discourse-migratepassword
  passwords: false

  # Por defecto, se importan todos los siguientes elementos. Puedes desactivarlos estableciéndolos en false.
  bookmarks: true
  attachments: true
  private_messages: false
  polls: false

  # Cuando es true: cada usuario importado tendrá el nombre de usuario original de phpBB como su nombre.
  # Cuando es false: el nombre de cada usuario importado estará en blanco a menos que el nombre de usuario se haya cambiado durante la importación.
  username_as_name: false

  # Mapea los emojis a las caritas utilizadas en phpBB. La mayoría de las caritas predeterminadas ya tienen un mapeo, pero puedes sobrescribir
  # los mapeos aquí si no te gustan algunos de ellos.
  # La sintaxis del mapeo es: nombre_emoji: 'carita_en_phpbb'
  # O mapea varias caritas a un solo emoji: nombre_emoji: ['carita1', 'carita2']
  emojis:
    # aquí hay dos ejemplos de mapeo...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'
1 me gusta

Esto ocurre específicamente si import_phpbb3.sh no encuentra el archivo phpbb_mysql.sql en la ruta correcta.

1 me gusta

Presumo que esto también se aplica a phpBB, ya que estoy intentando importar volcados desde la versión 3.2.x hasta la 3.3.3, pero hay miles de publicaciones principales faltantes. Incluso con múltiples ejecuciones y varias copias de seguridad de versiones secuenciales. Para simplificar la depuración, el script podría mostrar la URL del ID del mensaje en el foro antiguo para verificar la referencia. (… viewtopic.php?p=57912)

1 me gusta

En realidad, ya que estamos en esto, ¿por qué no registrar todas las filas de importación fallidas con sus mensajes de error en un archivo de volcado para compartir y analizar… solo una idea…

Al menos en un caso, existe un tema en viewtopic.php?f=3&t=1472, pero el primer post (viewtopic.php?p=145185) ha sido eliminado o borrado, y ahora el primer post del tema es viewtopic.php?p=145186, que es “una respuesta”.

Quizás, para mayor claridad, se debería especificar explícitamente si el tema padre no se encuentra literalmente en el volcado o simplemente no ha sido importado durante la reconstrucción.

1 me gusta

Me gustaría recibir un poco de retroalimentación para saber si todos lograron realizar una importación completa con archivos adjuntos recientemente. No logro que esto funcione.

Por ahora, simplemente no sé si el problema proviene del script o de la base de datos del foro phpbb :pray:

1 me gusta

¿Descargaste las imágenes y las colocaste en el lugar correcto?

No lo he hecho recientemente, pero me sorprendería si no funciona.

1 me gusta

Sí, verifiqué dos veces las carpetas y el archivo de configuración. Lo extraño es que se están importando en las carpetas predeterminadas/originales, pero no se integran en las publicaciones.

Era un phpBB muy antiguo, con algunos complementos. Hice una pequeña limpieza y actualicé con éxito desde phpBB 3.0.12 hasta la última versión 3.1 o 3.2; probé una importación para cada versión, pero no funcionó. Podría ser un problema con la base de datos. Por eso, si logras realizar una importación completa la próxima vez, sería muy útil que me lo hicieras saber. Si es un problema de la base de datos de phpBB, haré una investigación exhaustiva con ayuda; si es del script, puedo esperar. ¡Gracias por tu mensaje!

1 me gusta

No recuerdo la última vez que hice una importación de phpBB3; sospecho (aunque no tengo forma de saberlo) que es porque el script funciona tan bien.

Dado que se están subiendo a Discourse, el problema probablemente radica en cómo se mencionan en los posts de phpBB. ¿Ves algún error al ejecutarlo? Podrían dar pistas. O tal vez los plugins cambiaron cómo aparecen en los posts y/o en la base de datos. Probablemente tendrás que investigar un poco.

2 Me gusta

Tuve algunos “archivos faltantes” y “hora de publicación incorrecta”; ya los había tenido en mis importaciones anteriores, así que no creo que sea un problema grave. También tengo muchos “Publicación padre no existe” en la primera ejecución, pero eso ya se mencionó antes en este hilo, y una segunda ejecución del script lo soluciona.

Aparte de eso, el script funcionó bastante bien, sin ningún problema mayor.

Había un plugin (principalmente un archivo .htaccess, al parecer; yo no ejecuté este foro) para organizar los archivos en subcarpetas (por mes y año), pero los organicé en la misma carpeta y las actualizaciones en una versión limpia de phpBB funcionaron sin problemas. Todos los archivos importados funcionaron correctamente en phpBB 3.1 y 3.2.

Investigaré un poco más en la base de datos; podría tener un archivo SQL de una importación anterior. Compararé las tablas de adjuntos y publicaciones en mi servidor de prueba. Quizás haya algo que me haya pasado por alto.

4 Me gusta

Tienes razón, ha habido un error en TextProcessor::process_attachments que provoca que los archivos adjuntos no se incrusten en el Markdown de la publicación. He creado una PR.

5 Me gusta

¡Buen trabajo! Tras los dos pasos, la importación se ve genial. ¡Gracias!

4 Me gusta

Hola, acabo de importar unas 35 mil publicaciones; durante la importación noté muchos mensajes de “La publicación padre XXXXXX no existe. Omitiendo”, y cuando el proceso terminó, en el foro de Discourse tenía todas (creo) las “temáticas”, pero sin ninguna respuesta. Prácticamente, solo importó la temática, no las publicaciones (excepto la primera con el texto de la temática misma).
Además, no se importó ningún avatar, aunque los coloqué en el árbol correcto bajo la carpeta “import”.

El foro original estaba en phpBB2, se importó regularmente y era visible con todas sus publicaciones en phpBB3, pero eliminé muchos mensajes antiguos anteriormente; sin embargo, todo parece estar bien en phpBB3.

¿Alguna sugerencia? ¿Existe algún script de importación que pueda revisar?

1 me gusta

Ha sido así durante unas semanas/meses, pero no te preocupes, la importación se completará después de ejecutar nuevamente el comando import_phpbb3.sh.

3 Me gusta

¡Muchas gracias! Funcionó para las publicaciones, pero no para las avatares. Sigo buscando una solución.

1 me gusta

He leído el tema varias veces y he realizado algunas migraciones, pero cada vez me he confundido con este plugin y he encontrado errores similares. Estoy en mi tercera migración y me ha vuelto loco. Creo que cómo funciona este plugin puede confundir a los usuarios que realizan migraciones.

Debería especificarse en algún lugar que el plugin debe activarse en Discourse después del proceso de migración. Si ya está escrito en algún lugar, puede que me lo haya perdido y tal vez esta información deba enfatizarse.

Por favor, corríjame si me equivoco. :slight_smile:

1 me gusta

Informo de una corrección para la conversión de emoticonos en la importación desde phpBB 3.0.7.

  • Algunos emoticonos no se convirtieron correctamente a Discourse:


    (pero no siempre, por alguna razón; algunos emojis idénticos se mostraban a veces, otras no. Parecía aleatorio al principio)

  • Además, algunos emojis simplemente desaparecieron:
    phpBB:
    image
    Discourse:
    image

El problema provenía de la expresión regular utilizada en replace_smilies(text) de

Expresión regular defectuosa:

<!-- s(\S+) --><img src="\{SMILIES_PATH\}\/.+?" alt=".*?" title=".*?" \/><!-- s?:\S+ -->

Observa cómo el principio de la expresión regular no asume que hay un carácter : después:

<!-- s

Pero sí asume que hay uno al final de la expresión regular:

<!-- s?:\S+ -->

(Además, me pregunto por qué hay un ? que coincide con 0 o 1 del carácter s al final de la expresión regular, cuando no lo hay al principio de la expresión regular)

Eliminé este : de la expresión regular y mis dos problemas de emoticonos parecieron resolverse por completo.

En mi foro de phpbb, muchos emoticonos efectivamente comenzaban con : como :mrgreen: o :evil:, pero algunos no, como 8-) o ;)
La expresión regular antigua llevaba a capturas de emoticonos defectuosas. Por ejemplo, múltiples emoticonos uno al lado del otro se capturaban como uno solo.


Expresión regular corregida:

<!-- s(\S+) --><img src="\{SMILIES_PATH\}\/.+?" alt=".*?" title=".*?" \/><!-- s?\S+ -->

No estoy corrigiendo el código directamente en el repositorio de Discourse porque no estoy acostumbrado a usar git, y tampoco estoy seguro de que afecte a las importaciones de otras versiones de phpBB. No quiero estropear nada.


De todos modos, si la gente se encuentra con los mismos problemas que yo, aquí está la solución.

4 Me gusta

Otro problema corregido que podría ayudar a las personas en mi caso durante una migración de phpBB 3.0.7.

Por alguna razón, el contenido de las publicaciones de mi foro phpBB a veces tenía varios espacios seguidos al principio de las líneas. Sospecho que a algunos usuarios les “gusta” presionar frenéticamente la tecla de espacio sin prestar atención al escribir su mensaje, y no tenía importancia ya que la página renderizada ignoraba estos espacios múltiples:

Contenido de texto phpBB sin formato:

Salut tous  :)
  
     Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK  :evil: mais il a fait ces 2000 kms sans broncher ;)  
Maintenant le CT est OK . Merci L'Atelier Du Raz  8-')

    Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans  :roll: 
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !? 
What's About ?

             Je trouve ça un peu limte  :evil: 
Merci tous, fred

Página renderizada en el navegador:


Pero durante la importación de phpBB → Discourse, estos espacios existentes se convirtieron en bloques de código:

Así es como debería mostrarse:


Lo arreglé añadiendo una expresión regular que elimina los espacios al principio de cada línea:

 text.gsub!(/^[^\\S\\r\\n]+/, "\\n")

Añadí esto justo antes de process_smilies(text) en este archivo:


Otro problema que encontré.
En este código (todavía en text_processor.rb):

    def clean_bbcodes(text)
      # Many phpbb bbcode tags have a hash attached to them. Examples:
      #   [url=https://google.com:1qh1i7ky]click here[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Some text.[/quote:b0wtlzex]
      text.gsub!(/:(?:\\w{8})\\]/, ']')

En mi base de datos, las longitudes de estos hashes varían entre 5 y 8 caracteres, pero la expresión regular solo elimina los hashes que tienen exactamente 8 caracteres. Por lo tanto, mi importación conservó hashes más cortos en lugar de eliminarlos.
Lo arreglé cambiando la expresión regular a:

text.gsub!(/:(?:\\w{5,8})\\]/, ']')

Añadí un problema menor, todavía en el mismo archivo. La expresión regular que elimina las etiquetas BBCode [color] espera un valor hexadecimal precedido por un # obligatorio. Pero [color] también acepta cadenas como “red”, “blue”, etc., como valor. Así que modifiqué la expresión regular original:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#[a-z0-9]*)?\\]/i, "")

Añadiendo un ? después del # para que el # sea opcional.
Código corregido:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#?[a-z0-9]*)?\\]/i, "")

No sé si mis problemas son comunes en las importaciones de phpBB, o si son muy específicos de mi caso. Si es lo último, espero que mis explicaciones aquí no sean indeseadas o superfluas. Simplemente házmelo saber si es el caso para que no sea incómodo. :grinning_face_with_smiling_eyes:


Editar: ¿Es posible hacer que después de una migración, todos los temas existentes se marquen como “leídos” para cada usuario existente?

El objetivo es evitar que, después de la migración, los usuarios existentes al hacer clic en temas existentes (y a veces antiguos) los lleven al primer mensaje de esos temas que ya habían leído antes de la migración.

Idealmente, los usuarios existentes al hacer clic en temas existentes abrirían no el primer, sino el último mensaje (desde el final de la migración, por supuesto).

Es un pequeño problema de calidad de vida (y desaparecerá naturalmente después de unas semanas a medida que los usuarios usen el foro y lean temas), pero me pidieron esta sugerencia.

7 Me gusta

¡Gracias por compartir estas correcciones!

He tenido que hacer ajustes similares a las expresiones regulares para migraciones anteriores, por lo que estas serán útiles para futuras importaciones de phpbb.

Este tema puede ser útil How to mark imported posts as read - #2 by stuwest

3 Me gusta