Migrar un foro SMF2 a Discourse

Aquí hay una actualización: finalmente logré que funcionara. Algunas de las lecciones aprendidas pueden ayudar a otros, de ahí el detallado escrito a continuación. La complicación de los permisos de Unix podría valer la pena añadirla al OP.

Permisos de Unix en la carpeta de archivos adjuntos

El importador SMF2 estaba funcionando bien, pero hubo una pequeña complicación relacionada con los permisos de Unix de los archivos adjuntos. Al ejecutar el script de importación, se ejecuta como el usuario discourse, que no necesariamente tiene permisos de lectura y escritura en el montaje del volumen de archivos adjuntos.

Durante la importación, parece que el importador crea pequeños archivos temporales en el mismo directorio, por lo que debes asegurarte de que el usuario correcto tenga permisos de lectura y escritura. Lo hice usando chown recursivamente en el directorio en el host al usuario discourse, pero hay otras formas, como establecer permisos muy abiertos o usar Listas de Control de Acceso.

Depurar cargas fallidas es difícil

Si el importador SMF2 falla en una carga por cualquier motivo, informa el fallo de la misma manera, por lo que puede ser difícil saber por qué ha fallado un archivo adjunto/carga.

Las razones pueden incluir:

  • Los archivos adjuntos están en el lugar incorrecto en el sistema de archivos.
  • Los permisos de los archivos adjuntos son insuficientes (necesita rw).
  • El montaje del volumen de Docker no está configurado correctamente.
  • La base de datos SMF2 informa que debería haber un archivo adjunto que ya no existe en su carpeta de archivos adjuntos (en nuestro foro SMF2, que tiene unos 20 años, había bastantes archivos adjuntos ‘perdidos’, no hay mucho que puedas hacer por ellos…)
  • El objeto de carga no se está guardando correctamente en la base de datos de Discourse o en el disco en /shared/standalone/uploads
  • El markdown para el enlace de carga no se está creando.

Depuré esto probando cada paso del proceso de archivo adjunto de principio a fin y agregando una gran cantidad de declaraciones puts de depuración adicionales en el código smf2.rb, para averiguar qué parte del proceso de creación de carga no estaba funcionando. En mi caso, hubo numerosos problemas pequeños que finalmente se resolvieron uno por uno.

No seas perezoso Marcus

Y al final me volví perezoso y no estaba limpiando completamente la base de datos a cero, así que tuve el problema de que todo estaba funcionando, pero el importador no sobrescribe un Tema o Publicación que ya se ha importado. Por lo tanto, el Markdown que hace referencia a la carga, que debería verse así:

---

![file-name.jpg|357x268](upload://oK9TCvNVoojGyr357Amh19Cz.jpeg)

no se estaba insertando en las publicaciones.

Probar que está funcionando

La forma en que encontré para probar que todo esto estaba funcionando de principio a fin fue ejecutar

Post.where("raw LIKE ?", "%upload://%").count

en la consola de Rails. Devolvería el recuento de Publicaciones que realmente tienen un enlace de carga adecuado en ellas y este número aumenta gradualmente durante el proceso de importación.

2 Me gusta