Migrar un foro SMF2 a Discourse

¡Impresionante! ¿Incluso si mi antiguo SMF no usa URLs amigables?

¿Qué quieres decir con que no del todo?

En respuesta a tus preguntas:

  1. Sí, pero…
  2. No realmente significa que los enlaces al ID del tema (por ejemplo, index.php?topic=123) se crearán como enlaces permanentes y funcionarán, pero los anclajes a publicaciones específicas, como index.php?topic=123.msg789#msg789, no se conservarán/funcionarán más. Se recortan hasta el ID del tema.

A continuación, un ejemplo de enlaces permanentes de mi foro, importados desde SMF2

image

2 Me gusta

al menos el tema seguirá siendo una referencia para publicaciones específicas. eso es más que suficiente. excelente, muchas gracias por tu respuesta y también por reunir estas instrucciones.

1 me gusta

lo siento, se me olvidó preguntar: si mi SMF está configurado como categoría → tablero → tablero secundario, ¿debo eliminar primero la categoría “tablero” para que solo tenga dos niveles (foro → subforo) y así poder convertirlo correctamente a Discourse?

Hola @marcozambi,

Tengo curiosidad sobre cómo lograste que esto funcionara. Usé el importador el 19 de octubre para migrar un foro grande desde SMF a Discourse y, básicamente, se perdieron todos los enlaces en el formato antiguo (es decir, obtengo un error 404 al usar las URLs antiguas).

Por ejemplo, el enlace antiguo:

identificaba el siguiente tema:

¿Te importaría compartir tu “magia”? :grin:

Sin magia especial.
Cuando realicé la importación desde SMF en septiembre de 2018, el script importador de SMF2 hizo toda la magia.
Después de importar cada publicación, el script creaba el enlace permanente correspondiente.
De todos modos, hice algunas personalizaciones menores en los scripts, que detallé en el primer mensaje de este tema.

1 me gusta

Eso es correcto. Necesitas “aplanar” tu árbol de subforos SMF existente a 2 niveles.

1 me gusta

Sí, y te agradezco tu excelente publicación; la seguí al pie de la letra y pude migrar con éxito un foro con 6 millones de publicaciones.

Pero quizás los enlaces permanentes sí se crearon; ¿cómo los verificas? Si están en la base de datos, podría ser simplemente un problema de nginx que necesito solucionar.

Puedes consultar la lista de tus enlaces permanentes yendo a Administración → Personalizar → Enlaces permanentes.
Desde allí también puedes crear nuevos, si es necesario.

1 me gusta

:+1:

Estaba vacío, como sospechaba. Eso significa que esa parte del script no funcionó en nuestro caso. :expressionless: Bueno, aún puedo crear algunos manualmente (acabo de intentarlo y lo logré con el ejemplo que publiqué arriba).

¿Este paso debe contener los detalles de la base de datos antigua de SMF2, o debe ser exactamente ‘user’, ‘pass’, ‘db’?

¿Este paso debe contener los detalles de la base de datos antigua de SMF2, o exactamente como se especifica: ‘db’, ‘user’ y ‘pass’?

¿Este es el único paso donde debo usar los detalles originales de la base de datos antigua de SMF2?

Estas son las credenciales para conectarse a la instancia de MySQL en contenedor donde se importó el volcado de la base de datos de tu foro SMF.
Para ser claros, el MySQL en contenedor se ejecuta en el mismo servidor donde se ejecuta Discourse y solo es necesario que contenga el volcado que deberías haber realizado de la base de datos de SMF.

Este es el comando que debes ejecutar en el servidor que aloja la base de datos original de SMF2 para obtener un volcado, el cual luego tendrás que importar en la instancia de MySQL en contenedor mencionada anteriormente.

1 me gusta

Gracias por responder.

Sí, ya importé la base de datos original de smf2 al servidor de Discourse en la instancia de MySQL contenerizada.

Con la información de MySQL contenerizada en Settings.php, obtengo este error al ejecutar el script de importación:

Cargando grupos existentes…

Cargando usuarios existentes…

Cargando categorías existentes…

Cargando publicaciones existentes…

Cargando temas existentes…

creando grupos

Rastreo (lo más reciente primero):

11: desde script/import_scripts/smf2.rb:701:in `\u003cmain\u003e’

10: desde script/import_scripts/smf2.rb:28:in `run’

9: desde /var/www/discourse/script/import_scripts/base.rb:47:in `perform’

8: desde script/import_scripts/smf2.rb:66:in `execute’

7: desde script/import_scripts/smf2.rb:77:in `import_groups’

6: desde script/import_scripts/smf2.rb:281:in `query’

5: desde script/import_scripts/smf2.rb:287:in `__query’

4: desde /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22:in `query’

3: desde /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query’

2: desde /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt’

1: desde /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query’

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query’: La tabla ‘db.smf_membergroups’ no existe ( Mysql2::Error )

¿Alguna idea?

He seguido esta guía paso a paso varias veces, pero sigo quedando atascado en este punto.

Gracias.

Verifique en su base de datos MySQL si existe la tabla smf_membergroups. Si no existe, deberá:

  1. Modificar el script para tener en cuenta un nombre de tabla diferente, o
  2. Omitir la importación de grupos si no existen.
2 Me gusta

La extensión del archivo al final no importa. Si el archivo contiene declaraciones SQL válidas, se cargará de todos modos.

1 me gusta

Además, es común que la base de datos tenga un prefijo diferente a smf_. Muchos importadores tienen esa opción, pero no he verificado este en particular.

2 Me gusta

Usar las mismas credenciales de la base de datos smf2 para la instancia de MySQL en Docker resolvió mi problema. ¡Gracias, chicos!

1 me gusta

@Paracelsus Parece que estoy en el mismo barco; los enlaces permanentes están vacíos. :frowning:

Mi smf2 se ejecuta en el dominio raíz, mientras que Discourse se ejecuta en un subdominio del dominio raíz de smf2. ¿Eso importa?

Sí… los enlaces permanentes son un dolor de cabeza, pero aprendí a vivir con ello. Busqué en Google cada página web que pude encontrar donde se hubiera publicado un enlace a nuestro foro (con el formato antiguo de SMF), visité esas páginas, recogí alguna cadena de texto o transcribí un párrafo, lo busqué en el foro de Discourse y coloqué un enlace permanente en su lugar. Si aún tienes tu foro SMF activo, te recomendaría que lo hagas ahora, ya que a veces estos enlaces que la gente pone en sus páginas web no tienen ninguna cita o cadena de texto asociada, solo la URL, y aún así puedes encontrar el tema correcto.

En nuestro caso, utilizamos nuestra primera versión en discourse.forumscp.com, mientras que forumscp.com seguía funcionando en SMF como el «foro de producción» durante un tiempo (para poder probar cosas en Discourse y acostumbrarnos a él). Probé el proceso de actualizaciones incrementales varias veces y luego, un par de semanas antes, para asegurarme de que la transición funcionaría correctamente. El día de la transición, desactivamos nuestro foro antiguo, realizamos la última actualización incremental de la base de datos de SMF a Discourse y luego cambiamos el dominio siguiendo las instrucciones que tienen por aquí. También necesitábamos la ayuda de nuestro proveedor de hosting para revisar las configuraciones de nginx y, aunque no recuerdo exactamente, hubo algo relacionado con el DNS que tuvimos que cambiar, pero simplemente seguimos las instrucciones de nuestro proveedor y todo salió bien.

Puedes buscar otro importador que soporte enlaces permanentes y copiar el código. vbulletin y phpbb son probablemente buenos ejemplos.