Migrar un foro phpBB3 a Discourse

Supongo que no debería haber ocultado esta pregunta dentro del otro mensaje.

@gerhard, ¿cómo se manejan actualmente los diferentes bbcode? ¿Esto probablemente ocurrió por error o es intencional?

2 Me gusta

¿Qué tasa de importación de publicaciones por minuto lograron ustedes al probar con máquinas más potentes? Actualmente estoy ejecutando la importación en un Xeon de 8 núcleos y la máquina parece estar bastante inactiva, mientras que la tasa no supera significativamente las 1000 publicaciones/minuto.

Está en una SSD NVMe rápida, así que supongo que el límite no es la E/S. ¿Alguna idea sobre cómo mejorar aún más la velocidad? Estoy tratando de ganar unos pocos porcentajes para reducir el tiempo total de importación, quizás en una o dos horas (actualmente está en aproximadamente 14 horas).

1 me gusta

Hola, tengo un pequeño problema… he importado y convertido unas 100 mil publicaciones y luego descubrí que olvidé configurar correctamente los enlaces de redirección (además de no vincular los emoticonos con emojis en settings.yml…). ¿Existe alguna forma de volver a importar todo para que los enlaces se analicen correctamente, sin que se modifique nada más que ya haya configurado?
Si vuelvo a ejecutar el script, ¿solo pensará que ya lo importó y no hará nada, o sí lo hará?

1 me gusta

Por lo que he visto, esto no es posible, por desgracia. Hará lo que dijiste: ignorará las publicaciones ya importadas.

1 me gusta

¿Existe alguna forma de que olvide temporalmente las publicaciones importadas y las vuelva a importar?
(No de forma permanente, ya que más adelante querré agregar publicaciones)

1 me gusta

Probablemente no sea intencional; la conversión de BBCode a Markdown aún no es perfecta.

Eso suena correcto, a menos que puedas encontrar una CPU con mayor velocidad de un solo núcleo.

¿Tienes una copia de seguridad de antes de comenzar la importación? Podrías restaurarla e iniciar la importación de nuevo. De lo contrario, no hay mucho que hacer y tendrás que empezar desde cero.

1 me gusta

Qué lástima. ¿Esto también aplica a los emoticonos?

¿Con “empezar desde cero” te refieres a reinstalar Discourse?

1 me gusta

Lamento decirlo, pero sería realmente difícil y propenso a errores intentar corregir los emoticonos después de la importación. No puedo ayudarte con eso si decides seguir ese camino.

Sí, esencialmente. Puedes saltarte algunos pasos eliminando todos los datos y reconstruyendo el contenedor.

./launcher stop app
rm -rf /var/discourse/shared/
./launcher rebuild app
2 Me gusta

¡Gracias! :slight_smile: ¿Quieres decir que con esos dos comandos el foro estará listo para importar? ¿No hay que dar ningún otro paso? (¿Qué pasa con los temas, los premios, los grupos y todo lo demás que se configuró? ¿Hay alguna forma de hacer una copia de seguridad de eso? (Bueno, para los temas sé cómo guardarlos e importarlos, pero para la otra configuración…)) (demasiados paréntesis, lo sé)

Básicamente, estoy muy contento de haberme enterado ahora en lugar de en medio del traslado, cuando todo estaba caído, así que hay tiempo para arreglarlo. Pero me gustaría tener que rehacer lo menos posible…

Sí, sin una copia de seguridad tienes que rehacer esas cosas manualmente.

2 Me gusta

Si no está claro de alguna manera, esto borra toda la base de datos y comienzas desde cero.

Hay varias formas de guardar y restaurar configuraciones si buscas.

Pero, como se sugirió, realmente quieres hacer eso después de la importación o hacerlo todo y crear una copia de seguridad que uses como punto de partida antes de la importación.

3 Me gusta

Hola Helmi,

Un amigo que está trabajando en crear un plugin personalizado para códigos BB descubrió un error en el importador, que provocaba que las etiquetas de color no se renderizaran correctamente.

En sus palabras:

Las etiquetas de color se están eliminando deliberadamente de los mensajes. El error del conversor NO es que solo esté eliminando las etiquetas de cierre. El “error” es que NO está eliminando las etiquetas de color para nombres de colores.

Evidencia:
https://github.com/discourse/discourse/blob/master/script/import_scripts/ph pbb3/support/text_processor.rb

    def clean_bbcodes(text)
      # Muchas etiquetas bbcode de phpbb tienen un hash adjunto. Ejemplos:
      #   [url=https://google.com:1qh1i7ky]haz clic aquí[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Algun texto.[/quote:b0wtlzex]
      text.gsub!(/:(?:\w{8})\]/, ']')

      # eliminar etiquetas de color
      text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")
    end

Esa última parte text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "") es una expresión regular que capturará las etiquetas de color con códigos de hash y también las etiquetas de cierre de color, pero no las etiquetas de color con nombres de colores (como color=verde, etc.).

Solución: Eliminar la línea.

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

En realidad no la queremos. Queremos mantener esos datos de color, independientemente de cómo decidamos mostrarlos. (Bueno, para nuestro foro esa es la solución. Para Discourse, probablemente harás que elimine todas las etiquetas de color, no solo las de nombres de colores).

2 Me gusta

Hola Gerhard, así que después de hacer lo que me indicaste (primero eliminé, luego rehice mucho trabajo, luego hice una copia de seguridad y finalmente intenté una importación. Solo para descubrir a mitad de camino que había cometido un error, así que detuve la importación y tuve que empezar de nuevo desde cero (ya que ya había importado datos).

Así que, volví a eliminar todo.
Después de reconstruir la aplicación para poder restaurar mi copia de seguridad y luego realizar la importación, el sitio se niega a conectarse.

Cuando ejecuto Discourse Doctor, dice: Versión de Discourse en [dominio] NO ENCONTRADA. En localhost no encontrado. No hay otros errores.

¿Qué necesito hacer?

No era necesario reconstruir, solo restaurar la copia de seguridad.

Mi suposición es que necesitas ejecutar

./launcher start import

Discourse-doctor no conoce el contenedor de importación.

Es posible que necesites reconstruir la aplicación y el contenedor de importación, ya que deberían tener la misma versión.

He reconstruido la importación, he reconstruido la aplicación y aún así recibo un error de conexión rechazada. :frowning:

Necesitas volver a agregar el volcado de la base de datos y los archivos de phpBB. Probablemente los eliminaste durante el restablecimiento.

2 Me gusta

Sí, ya los he eliminado. ¿Pero no necesitaré restaurar mis cosas primero? Había configurado muchas cosas antes de la importación para no tener que hacerlo de nuevo si tuviera que repetir la importación. ¿No importaría ahora simplemente en una instancia de Discourse sin modificaciones?

Y luego restaurarás tu copia de seguridad, que debería estar en /var/discourse/shared/backups/default

aaand aquí estoy de nuevo, perdón, pero ahora tengo otro problema…

esta vez es: sonrisas! He puesto cada sonrisa en settings.yml así:

happy: [‘:D’,‘:-D’]
woo: ‘:woo:’
etc.

He colocado las imágenes de las sonrisas en el directorio /var/discourse/shared/standalone/import/images/smilies.
Al importar no vi ningún error relacionado con sonrisas no encontradas o algo similar.

sin embargo, las sonrisas no se han mapeado a emojis y en los mensajes se han convertido en imágenes.

¿qué he hecho mal?

¡gracias una vez más por tu ayuda y tus conocimientos!

edición: :exploding_head: por supuesto… tengo que mapearlas desde phpbb3, no desde phpbb2…
creo que esto lo soluciona, pero aún tengo que probar si ese era el problema.

edición2: He realizado una nueva importación con un nuevo volcado de base de datos de phpbb3 que ya tenía las sonrisas insertadas. Aún así, no hay sonrisas. Se han convertido en imágenes y no están en el conjunto de emojis. ¿Qué podría ser el problema?

Finalmente he logrado mapear los smilies a emojis.
Dado que me costó bastante trabajo, ya que tenía más de 150 smilies personalizados con nombres de imagen y códigos de smiley diferentes, aquí hay una guía ampliada y rápida para otros en mi situación.

Entendiendo qué hace el importador con los smilies
Lo que pensé que ocurriría era que, al agregar los códigos de smiley en el importador y colocar las imágenes en el archivo de imagen designado, estas se agregarían automáticamente también a la carpeta de emojis. Pero no es así. Por lo tanto, tendrás que importar manualmente tus imágenes de smiley a los emojis.
Al importarlas, deben tener el nombre del código de smiley que realmente vas a usar. Por ejemplo, si tenías un smiley cuyo nombre de archivo de imagen era “cheery_icon0.gif” y que se mostraba cuando los usuarios escribían :cheer:, tendrás que renombrar esa imagen a cheer.gif y subirla a los emojis (en admin cp > personalizar > emojis).

Ahora, se vuelve aún más interesante cuando tienes un montón de smilies que en phpBB se muestran con cosas como:

<-)
%-)
:3

Por ejemplo, yo tenía un smiley con el código <:slight_smile: y que se llamaba “_1partyguyhat.gif”.

Primero tuve que decidir cuál sería el nuevo código en Discourse, ya que no se pueden nombrar archivos con ‘<:-)’. Luego renombré el gif con ese código y agregué la correspondiente asignación en el archivo de configuración.

Así que, para mí, ese smiley en particular quedó así:

party_hat: '<:-)'

Lo que sucede al importar es que todas las instancias en una publicación donde alguien escribió <:slight_smile: se traducen a :party_hat:.
Luego, se utilizará el emoji de sombrero de fiesta para representar el smiley siempre que esté disponible en los emojis.

Consejos cuando tienes 120 smilies para convertir :wink:

  • Crea una publicación de prueba en tu instancia de phpBB3 con TODOS los smilies incluidos.
  • Al importar, puedes revisar rápidamente esa publicación y ver si queda algún texto sin traducir, o con la opción [editar], comprobar si alguno se ha convertido en una imagen en lugar de solo en el código de emoji. (Créeme, esto puede pasar si olvidas un : o confundes un ; con un :).

Solución de problemas en settings.yml

  • Debes descomentar la línea emojis. (Yo la había pasado por completo por alto).
  • El formato debe tener 4 espacios delante de un código de smiley.
  • Debes agregar todos los códigos, incluso si ya tenías un smiley codificado como :cheer: y ya habías colocado un cheer.gif en los emojis. Si no lo haces, seguirá convirtiéndose en un archivo de imagen en lugar de en un código de emoji.
  • Si tienes un smiley codificado como :yes: o :no:, debes comentarlos, ya que de lo contrario se interpretarán como valores booleanos :true: o :false:. En ese caso, tendrías que hacer algo como esto: "yes": ':yes:' para codificar ese emoji en particular.
  • Edición: ¡ah, y otro dato divertido que se me olvidó! Si usas guiones en los emojis, como ‘party-hat’, al subir la imagen a Discourse se convertirá en un guion bajo, por lo que se llamará ‘party_hat’. Así que no uses ‘-’, solo ‘_’.

Espero que esto haya ayudado a alguien. Sé que pasé casi dos semanas en esto antes de lograr importar todo correctamente.

8 Me gusta