Migrer un forum SMF2 vers Discourse

Voici une mise à jour : j’ai finalement réussi. Certaines des leçons apprises pourraient aider d’autres personnes, d’où le compte rendu détaillé ci-dessous. Le piège des permissions Unix pourrait valoir la peine d’être ajouté à l’OP.

Permissions Unix sur le dossier des pièces jointes

L’importateur SMF2 fonctionnait bien, mais il y avait un petit piège lié aux permissions Unix des pièces jointes. Lors de l’exécution du script d’importation, celui-ci s’exécute en tant qu’utilisateur discourse, qui n’a pas nécessairement les permissions de lecture et d’écriture sur le montage du volume des pièces jointes.

Lors de l’importation, il semble que l’importateur crée de petits fichiers temporaires dans le même répertoire, vous devez donc vous assurer que l’utilisateur correct dispose des permissions de lecture et d’écriture. J’ai fait cela en utilisant chown sur le répertoire sur l’hôte de manière récursive à l’utilisateur discourse, mais il existe d’autres moyens, notamment en définissant des permissions très ouvertes ou en utilisant des listes de contrôle d’accès.

Le débogage des téléchargements échoués est difficile

Si l’importateur SMF2 échoue pour une raison quelconque lors d’un téléchargement, il signale l’échec de la même manière, il peut donc être difficile de savoir pourquoi une pièce jointe/un téléchargement a échoué.

Les raisons peuvent inclure :

  • Les pièces jointes sont au mauvais endroit sur le système de fichiers.
  • Les permissions sur les pièces jointes sont insuffisantes (nécessite rw).
  • Le montage du volume Docker n’est pas correctement configuré.
  • La base de données SMF2 signale qu’il devrait y avoir une pièce jointe qui n’existe plus dans votre dossier de pièces jointes (dans notre forum SMF2, qui a environ 20 ans, il y avait pas mal de pièces jointes ‘perdues’ - il n’y a pas grand-chose que vous puissiez faire pour celles-ci…)
  • L’objet de téléchargement n’est pas correctement enregistré dans la base de données Discourse ou sur le disque dans /shared/standalone/uploads
  • Le markdown pour le lien de téléchargement n’est pas créé.

J’ai débogué cela en testant chaque étape du processus de pièce jointe de bout en bout et en ajoutant un grand nombre d’instructions puts de débogage supplémentaires dans le code smf2.rb, pour déterminer quelle partie du processus de création du téléchargement ne fonctionnait pas. Dans mon cas, il y avait de nombreux petits problèmes qui ont finalement été résolus un par un.

Ne sois pas paresseux Marcus

Et à la toute fin, j’ai été paresseux et je n’ai pas complètement vidé la base de données à zéro, j’ai donc eu le problème que tout réussissait - mais l’importateur ne remplace pas un Sujet ou un Message qui a déjà été importé. Ainsi, le Markdown qui fait référence au téléchargement, qui devrait ressembler à ceci :

---

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

n’était pas inséré dans les messages.

Tester que ça marche

La façon dont j’ai trouvé pour tester si tout cela fonctionnait de bout en bout était d’exécuter

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

dans la console Rails. Cela renverrait le nombre de Posts qui ont réellement un lien de téléchargement correct en eux et ce nombre augmente progressivement tout au long du processus d’importation.

2 « J'aime »

Veuillez excuser ma réponse tardive.
Si vous accédez à l’historique du premier message et revenez lire les anciennes versions, vous verrez que l’étape 4 a été modifiée et réduite dans la révision 10. Les modifications que j’ai apportées ont été supprimées, peut-être parce qu’elles ont maintenant été corrigées dans le script de migration ruby. Je ne suis pas sûr, et peut-être que la copie de smf2.rb est maintenant complètement redondante.

3 « J'aime »