Ein SMF2-Forum zu Discourse migrieren

Hier ist ein Update – ich habe es schließlich zum Laufen gebracht. Einige der gewonnenen Erkenntnisse könnten anderen helfen, daher die detaillierte Ausarbeitung unten. Der Knackpunkt mit den Unix-Berechtigungen könnte es wert sein, zum OP hinzugefügt zu werden.

Unix-Berechtigungen für den Anhängeordner

Der SMF2-Importer funktionierte gut, aber es gab einen kleinen Knackpunkt bezüglich der Unix-Berechtigungen der Anhänge. Wenn das Importskript ausgeführt wird, läuft es als discourse-Benutzer, der nicht unbedingt sowohl Lese- als auch Schreibberechtigungen für den Volume-Mount der Anhänge hat.

Während des Imports scheint der Importer kleine temporäre Dateien im selben Verzeichnis zu erstellen, daher müssen Sie sicherstellen, dass der richtige Benutzer sowohl Lese- als auch Schreibberechtigungen hat. Ich habe dies getan, indem ich das Verzeichnis auf dem Host rekursiv auf den discourse-Benutzer per chown gesetzt habe, aber es gibt auch andere Wege, einschließlich der Festlegung sehr offener Berechtigungen oder der Verwendung von Zugriffskontrolllisten.

Das Debuggen fehlgeschlagener Uploads ist schwierig

Wenn der SMF2-Importer aus irgendeinem Grund bei einem Upload fehlschlägt, meldet er den Fehler auf die gleiche Weise, sodass es schwierig sein kann festzustellen, warum ein Anhang/Upload fehlgeschlagen ist.

Gründe können sein:

  • Anhänge befinden sich an der falschen Stelle im Dateisystem.
  • Die Berechtigungen für die Anhänge sind unzureichend (benötigt rw).
  • Der Docker-Volume-Mount ist nicht korrekt eingerichtet.
  • Die SMF2-DB meldet, dass ein Anhang vorhanden sein sollte, der nicht mehr in Ihrem Anhängeordner existiert (in unserem SMF2-Forum, das etwa 20 Jahre alt ist, gab es ziemlich viele ‘verlorene’ Anhänge – da kann man nicht viel machen…)
  • Das Upload-Objekt wird nicht korrekt in der Discourse-DB oder auf der Festplatte unter /shared/standalone/uploads gespeichert.
  • Das Markdown für den Upload-Link wird nicht erstellt.

Ich habe dies debuggt, indem ich jeden Schritt des Anhangsprozesses von Ende zu Ende getestet und eine riesige Anzahl zusätzlicher Debugging-puts-Anweisungen in den Code von smf2.rb eingefügt habe, um herauszufinden, welcher Teil des Upload-Erstellungsprozesses nicht funktionierte. In meinem Fall gab es zahlreiche kleine Probleme, die schließlich einer nach dem anderen behoben wurden.

Sei nicht faul, Marcus

Und ganz am Ende wurde ich faul und habe die Datenbank nicht vollständig auf Null zurückgesetzt, sodass ich das Problem hatte, dass alles erfolgreich war – aber der Importer überschreibt kein Thema oder keinen Beitrag, der bereits importiert wurde. Daher wurde das Markdown, das auf den Upload verweist und so aussehen sollte:

---

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

nicht in die Beiträge eingefügt.

Testen, ob es funktioniert

Die Methode, mit der ich herausfand, ob das alles End-to-End funktionierte, war, Folgendes auszuführen:

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

in der Rails-Konsole. Es würde die Anzahl der Beiträge zurückgeben, die tatsächlich einen ordnungsgemäßen Upload-Link enthalten, und diese Zahl stieg während des Importprozesses allmählich an.

2 „Gefällt mir“

Entschuldigen Sie die späte Antwort.
Wenn Sie auf die Historie des ersten Beitrags zugreifen und zurückgehen, um die alten Versionen zu lesen, sehen Sie, dass Schritt 4 in Revision 10 bearbeitet und reduziert wurde. Die von mir vorgenommenen Änderungen wurden herausbearbeitet, möglicherweise weil sie jetzt im Ruby-Migrationsskript behoben wurden. Ich bin mir nicht sicher, und vielleicht ist die Kopie von smf2.rb jetzt völlig überflüssig.

3 „Gefällt mir“