Migrar un foro SMF2 a Discourse

Perdón por volver a responder. Estoy teniendo dificultades para entender por qué no se están creando los enlaces permanentes. :disappointed_face:

Para recapitular:
Estoy utilizando las URLs no amigables predeterminadas de SMF2 en el dominio raíz de nivel superior. Discourse está instalado en un subdominio de ese dominio raíz. He utilizado el importador smf2.rb de la última versión del repositorio de Discourse para convertir SMF2 a Discourse (siguiendo su guía), pero no hay enlaces permanentes en Discourse después de que terminó la importación.

¿Hay algún paso adicional necesario, como ciertas configuraciones o plugin(s) en ejecución en SMF2 o Discourse?

Parece que esa función es para URLs amigables, ¿verdad? Así que tendrías que cambiarla en consecuencia (a menos que haya pasado por alto algo en el código).

1 me gusta

Estoy un poco confundido porque Marco no utilizó URLs amigables, pero se crearon permalinks para él y usó el mismo script de importación.

Esta es la función de URLs amigables en el script de importación: discourse/script/import_scripts/smf2.rb at main · discourse/discourse · GitHub

Espero contar con ayuda para que esto funcione con las URLs " feas " predeterminadas de SMF… cualquier orientación sería muy apreciada. :pray: Gracias, chicos.

No lo sé. Pero mi mejor respuesta gratuita es que creo que lo que quieres revisar es la línea 222 que dice:

           Permalink.find_or_create_by(url: "forums/index.php/board,#{c["id_board"]}.0.html", category_id: category.id)

Cambiarías ese permalink (¿o quizás los otros pocos?) por lo que parecen los feos? Aunque, a mí me parece bastante feo. También podrías ajustar los permalink_normalizations al principio del archivo.

Perdón, Jay, por responderte de nuevo, pero ¿dónde está la línea 222? La línea 222 de smf2.rb solo dice:

if parent

Bueno, entonces tú y yo estamos viendo diferentes versiones. No estoy seguro de por qué podría ser eso. Pero lo que debes buscar son esas líneas sobre los Permalinks.

Estoy confundido porque la versión que enlazo parece ser la más reciente “oficial”… pero eres la segunda persona que menciona una versión diferente. ¿Qué me estoy perdiendo? ¿Dónde puedo conseguir tu versión?

¡Ajá! Lo siento. Parece que hice clic en el script smf1. Así que mira smf1.rb1, que está justo ahí junto al script smf2.rb que estás viendo.

Puedes mirar el script smf1 o usar make_prettyurl_permalinks como modelo para crear un make_uglyurl_permalinks. Pero eso lee de la tabla de URLs bonitas, así que quizás sea más fácil usar smf1.rb como modelo, aunque tendría que revisar la base de datos para asegurarme. No. Eso tampoco ayudará mucho a menos que modifiques las funciones create_xxx.

Lo siento. No veo una solución que pueda explicarse aquí.

1 me gusta

Estoy hasta aquí, pero no logro avanzar. Incluso he creado un nuevo usuario en el servidor MySQL con contraseña nativa y lo he intentado, pero sin éxito.

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...
Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:701:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': El cifrado RSA no es compatible: el plugin caching_sha2_password se compiló con soporte de GnuTLS (Mysql2::Error)

OK, después de MUCHAS horas de idas y venidas intentando hacer que esto funcione, he identificado el problema y lo publico aquí por si otros se quedan atascados como yo.

El contenedor Docker de MySQL es la versión 8; por alguna razón, la biblioteca de MariaDB que incluye la plantilla de MySQL no funciona.

No incluí el archivo de plantilla de MySQL en el archivo de configuración del contenedor Docker de importación; este fue el primer cambio.

Construí el contenedor de importación y entré en él con ./launcher enter import.

Luego:

echo "gem 'mysql2'" >> Gemfile
wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
dpkg -i mysql-apt-config_0.8.17-1_all.deb

Esto muestra un prompt interactivo donde puedes seleccionar los valores predeterminados (MySQL 8 con herramientas).

Luego instalé la biblioteca normal de MySQL 8 y continué la construcción:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'bundle config unset deployment'
su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'

Una vez que todo esto estuvo listo, el resto fue igual; la importación ahora se está ejecutando.

Quizás los desarrolladores de Discourse quieran ajustar los scripts de importación para tener esto en cuenta; al menos ahora está en los foros para que otros lo vean si se quedan atascados como yo.

3 Me gusta
  1. ¿Debo destruirlo siguiendo estas instrucciones? how-to-migrate-import-from-smf2-to-discourse/90129#cleanup-5

  2. He transferido manualmente el directorio de adjuntos desde SMF2 a Discourse antes de importar, luego ejecuté el importador una vez, pero las subidas no aparecen en los mensajes de Discourse. ¿Alguna idea de por qué?

  3. Ya he ejecutado el importador una vez sin S3 habilitado, pero quiero usar S3. ¿Qué debo hacer?

  1. Hmm… Intenta habilitar S3 y volver a importar.
  2. Habilita S3 antes de iniciar la importación.
1 me gusta

Ya ejecuté el importador una vez sin S3. ¿Se transferirían las cargas de los temas que ya se importaron a S3 durante una importación delta?

Lo mejor es que simplemente comiences de nuevo y habilites S3 antes de importar.

Estoy obteniendo este error al crear usuarios:

oxipng worker: oxipngno encontrado; proporcione el binario adecuado o desactive este trabajador (argumento --no-oxipng o:oxipng => false a través de las opciones)

Después de eso, comienza a crear publicaciones.

  • ¿Podría ser esta la razón por la que los archivos adjuntos no aparecen en Discourse?
  • ¿Dónde debería instalarse oxipng?

Actualización: No entiendo por qué estoy obteniendo este error de oxipng. No puedo encontrar nada sobre ello en ninguna parte de Discourse y estoy experimentando este problema solo al ejecutar el script de importación smf2. ¿Podría estar relacionado con esto? https://meta.discourse.org/t/faster-and-smaller-uploads-in-discourse-with-rust-webassembly-and-mozjpeg-blog

Eso es solo una advertencia de la biblioteca de optimización de imágenes que usamos en el servidor; no debería bloquear nada.

2 Me gusta

Así que pensé que mis problemas de importación podrían estar relacionados con S3, pero resulta que S3 parece estar funcionando perfectamente. El problema que tengo es que, después de ejecutar el script de importación (con S3 habilitado) y reconstruir el contenedor de importación, parece que todos los temas en Discourse carecen de las subidas que son adjuntos en los temas de smf2. En otras palabras, no hay ninguna pista visual de que haya una subida en un tema de Discourse, algo que claramente se ve como un adjunto en su equivalente en un tema de smf2. El resultado es el mismo cuando importo con S3 deshabilitado. Me he quedado un poco sin ideas aquí. :confused: ¿Alguna idea?

Puede ser que las imágenes estén adjuntas al mensaje, por lo que el script de importación sabe que debe importarlas, pero que no se hagan referencia a ellas en el mensaje, de modo que no aparezcan. Necesitas modificar el texto del mensaje para incluir un enlace a las imágenes. He visto algo así, creo que en un foro diferente.

¿Te refieres a modificar la publicación en SMF2 para incluir enlaces a los archivos adjuntos antes de importar a Discourse?

Bueno, eso podría ser una opción.

Pero mi intención es modificar el script de importación para que adjunte el archivo al post original. Algo como