phpBB3 Forum auf Discourse migrieren

Ich hatte denselben Fehler. Ich vermute, er tritt auf, wenn eine veraltete Datei shared/standalone/import/mysql/imported vorliegt. Das Löschen dieser Datei hat den Fehler behoben.

2 „Gefällt mir“

Das Migrieren von Passwörtern hat anscheinend bei mir nicht funktioniert.

Ich habe passwords: true in shared/standalone/import/settings.yml gesetzt, bevor ich aus einem phpBB-3.0-Dump importiert habe. In containers/app.yml habe ich Folgendes:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discoursehosting/discourse-migratepassword.git

Danach habe ich ./launcher rebuild app ausgeführt. Der Import scheint vollständig erfolgreich gewesen zu sein, außer dass ich mich mit meinem phpBB-Passwort nicht anmelden kann. Mir sind keine relevanten Fehlermeldungen beim Import aufgefallen, und das Passwort ist 20 Zeichen lang, also sollte es die Mindestlängenbeschränkung erfüllen.

Worauf sollte ich bei der Fehlersuche achten?

Noch etwas mehr Information: Ich sehe Einträge import_pass in der Tabelle user_custom_fields der Datenbank, die mit Passwort-Hashes übereinstimmen, die in der phpBB-Datenbank waren. Dieser Teil scheint also funktioniert zu haben?

Edit: Oh, ich habe herausgefunden, was passiert ist. Ich hatte völlig vergessen, dass wir bei phpBB auf LDAP-Authentifizierung umgestellt hatten… Die importierten Passwörter waren also völlig in Ordnung, nur 15 Jahre alt! Jetzt muss ich also etwas basteln, um die Passwort-Hashes aus LDAP zu extrahieren… :slight_smile:

1 „Gefällt mir“

Hallo zusammen,

hat jemand kürzlich eine Importierung mit Anhängen durchgeführt?

Die Benutzer und Beiträge funktionieren einwandfrei, aber die Anhänge werden nicht zu den Beiträgen hinzugefügt.

In einigen Beiträgen ist immer noch der BBCode vorhanden:

Das Seltsame ist, dass der Inhalt des Ordners „files" in den „uploads"-Ordner von Discourse übertragen wurde.

Zuerst dachte ich, es läge daran, dass die phpBB-Version 3.0.12 zu alt war. Ich habe phpBB jedoch auf 3.0.14 aktualisiert, Discourse und den uploads-Ordner bereinigt und den Import erneut versucht. Leider ohne Erfolg.

Ich habe die phpBB-Version auf 3.2.0 aktualisiert (nachdem ich das Support-Toolkit ausgeführt hatte, um die Datenbank von Modifikationen zu bereinigen) auf einem Testserver, aber immer noch ohne Erfolg.

Bevor ich meine Datenbank weiter untersuche, wollte ich sicherstellen, dass das Skript für alle funktioniert.

Ich glaube nicht, dass ich einen Fehler in meiner Konfigurationsdatei gemacht habe, aber vielleicht hilft ein frischer Blick darauf.

# Dies ist eine Beispielkonfigurationsdatei für den phpBB3-Importer.

database:
  type: MySQL # Derzeit wird nur MySQL unterstützt
  host: localhost
  port: 3306
  username: root
  password:
  schema: phpbb
  table_prefix: phpbb_ # Ändern Sie dies, wenn Ihr Forum ein anderes Präfix verwendet. Normalerweise beginnen alle Tabellennamen mit phpbb_
  batch_size: 1000 # Ändern Sie dies nicht, es sei denn, Sie wissen, was Sie tun. Der Standardwert (1000) sollte problemlos funktionieren.

import:
  # Setzen Sie dies, wenn Sie mehrere phpBB-Foren in ein einzelnes Discourse-Forum importieren.
  #
  # Zum Beispiel, wenn Sie mehrere Sites importieren, prefixen Sie alle importierten IDs
  # mit 'first', um Konflikte zu vermeiden. Folgende Importläufe müssen einen
  # anderen 'site_name' haben.
  #
  # site_name: first
  #
  site_name:

  # Neue Kategorien erstellen
  #
  # Zum Beispiel, um eine übergeordnete Kategorie und eine Unterkategorie zu erstellen.
  #
  # new_categories:
  # - forum_id: foo
  #   name: Foo Kategorie
  # - forum_id: bar
  #   name: Bar Kategorie
  #   parent_id: foo
  #
  new_categories: []

  # Kategorienzuordnungen
  #
  # Zum Beispiel werden Themen aus phpBB-Kategorie 1 und 2 in die neue
  # Kategorie „Foo Kategorie" importiert, Themen aus phpBB-Kategorie 3
  # in die Unterkategorie „Bar Kategorie", Themen aus phpBB-Kategorie 4
  # werden in Kategorie 5 zusammengeführt und Kategorie 6 wird übersprungen.
  #
  # category_mappings:
  #   1: foo
  #   2: foo
  #   3: bar
  #   4: 5
  #   6: SKIP
  #
  category_mappings: {}

  # Tag-Zuordnungen
  #
  # Zum Beispiel werden importierte Themen aus phpBB-Kategorie 1 mit
  # 'first-category' getaggt, usw.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings:

  # Rang-zu-Vertrauenslevel-Zuordnung
  #
  # Ordnen Sie phpBB 3.x-Rangstufen den Vertrauensstufen zu
  # Benutzer mit mindestens Rang 3000 erhalten TL3, usw.
  #
  # rank_mapping:
  #   trust_level_1: 200
  #   trust_level_2: 1000
  #   trust_level_3: 3000
  #
  rank_mapping:

  # WARNUNG: Aktivieren Sie diese Option nicht, es sei denn, Sie wissen, was Sie tun.
  # Dies wird wahrscheinlich die BBCode-zu-Markdown-Konvertierung beschädigen und den Import verlangsamen.
  use_bbcode_to_md: false

  # Dies ist der Pfad zum Stammverzeichnis Ihrer aktuellen phpBB-Installation (oder einer Kopie davon).
  # Der Importierer erwartet, die Verzeichnisse /files und /images im Basisverzeichnis zu finden.
  # Sie müssen dies auf etwas wie /var/www/phpbb ändern, wenn Sie den Docker-basierten Importierer nicht verwenden.
  # Dies ist nur erforderlich, wenn Sie Avatare, Anhänge oder benutzerdefinierte Smileys importieren möchten.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # Dies wird für das Umschreiben interner Links in Beiträgen benötigt
    original: ***.com   # ohne http(s)://
    new: https://****.org       # mit http:// oder https://

  # Aktivieren Sie dies, wenn Sie alte Foren-Links zu den neuen Standorten umleiten möchten.
  permalinks:
    categories: true  # leitet /viewforum.php?f=1 zu /c/category-name um
    topics: true      # leitet /viewtopic.php?f=6&t=43 zu /t/topic-name/81 um
    posts: false      # leitet /viewtopic.php?p=2455#p2455 zu /t/topic-name/81/4 um
    # Fügen Sie ein Präfix zu jedem Linktyp hinzu, z. B. 'forum', um /forum/viewtopic.php?f=6&t=43 zu /t/topic-name/81 umzuleiten
    # Lassen Sie es leer, wenn Ihr Forum nicht in einem Unterordner installiert war.
    prefix:

  avatars:
    uploaded: true  # hochgeladene Avatare importieren
    gallery: false   # die vordefinierten Avatare importieren, die phpBB bietet
    remote: false   # WARNUNG: Dies kann den Import erheblich verlangsamen. Es wird versucht, entfernte Avatare herunterzuladen.

  # Wenn true: Anonyme Benutzer werden als gesperrte Benutzer importiert. Sie können sich nicht anmelden und haben keine E-Mail-Adresse.
  # Wenn false: Der Systembenutzer wird für alle anonymen Benutzer verwendet.
  anonymous_users: true

  # Aktivieren Sie dies, wenn Sie Passwort-Hashes importieren möchten, um das Plugin „migratepassword" zu verwenden.
  # Dies ermöglicht es Benutzern, sich mit ihrem aktuellen Passwort anzumelden.
  # Das Plugin ist verfügbar unter: https://github.com/discoursehosting/discourse-migratepassword
  passwords: false

  # Standardmäßig werden alle folgenden Dinge importiert. Sie können sie deaktivieren, indem Sie sie auf false setzen.
  bookmarks: true
  attachments: true
  private_messages: false
  polls: false

  # Wenn true: Jeder importierte Benutzer erhält den ursprünglichen Benutzernamen aus phpBB als Namen
  # Wenn false: Der Name jedes importierten Benutzers bleibt leer, es sei denn, der Benutzername wurde während des Imports geändert
  username_as_name: false

  # Emojis auf in phpBB verwendete Smileys abbilden. Die meisten Standard-Smileys haben bereits eine Zuordnung, aber Sie können
  # die Zuordnungen hier überschreiben, wenn Ihnen einige nicht gefallen.
  # Die Syntax für die Zuordnung lautet: emoji_name: 'smiley_in_phpbb'
  # Oder ordnen Sie mehrere Smileys einem Emoji zu: emoji_name: ['smiley1', 'smiley2']
  emojis:
    # hier sind zwei Beispielzuordnungen...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'
1 „Gefällt mir“

Dies tritt speziell dann auf, wenn import_phpbb3.sh die Datei phpbb_mysql.sql nicht am richtigen Pfad findet.

1 „Gefällt mir“

Ich gehe davon aus, dass dies auch für phpBB gilt, da ich versuche, Backups von v3.2.x bis v3.3.3 zu importieren, wobei jedoch Tausende von übergeordneten Beiträgen fehlen. Selbst nach mehreren Durchläufen und mehreren sequenziellen Versions-Backups. Zur Vereinfachung der Fehlersuche könnte das Skript die URL für die Nachrichten-ID zum alten Forum zur Überprüfung ausgeben. (… viewtopic.php?p=57912)

1 „Gefällt mir“

Da wir schon dabei sind, warum nicht alle fehlgeschlagenen Importzeilen samt ihrer Fehlermeldungen in einer Dump-Datei protokollieren, um sie zur Analyse zu teilen? – Nur eine Idee…

Ein Beispiel: Es gibt einen Topic-Eintrag unter viewtopic.php?f=3&t=1472, aber der erste Beitrag unter viewtopic.php?p=145185 wurde gelöscht oder entfernt. Der erste Beitrag des Topics ist nun viewtopic.php?p=145186, was eine Antwort ist.

Vielleicht sollte man zur Klarheit explizit angeben, ob das übergeordnete Thema im Dump buchstäblich nicht gefunden wurde oder einfach noch nicht in die Rekonstruktion importiert wurde.

1 „Gefällt mir“

Ich würde mich trotzdem über ein wenig Feedback freuen, um zu wissen, ob es kürzlich jedem gelungen ist, eine vollständige Import mit Anhängen durchzuführen. Bei mir funktioniert das nicht.

Im Moment weiß ich einfach nicht, ob das Problem vom Skript oder von der Datenbank des phpBB-Forums stammt :pray:

1 „Gefällt mir“

Hast du die Bilder heruntergeladen und an den richtigen Ort gelegt?

Ich habe das nicht kürzlich gemacht, aber ich würde mich wundern, wenn es nicht funktionieren würde.

1 „Gefällt mir“

Ja, ich habe die Ordner und die Einstellungsdatei noch einmal überprüft. Das Seltsame ist, dass sie in die Standard-/Originalordner importiert werden, aber nicht in die Beiträge integriert sind.

Es handelte sich um eine sehr alte phpBB-Version mit einigen Plugins. Ich habe eine kleine Bereinigung durchgeführt und erfolgreich von phpBB 3.0.12 auf die neueste Version 3.1 oder 3.2 aktualisiert. Für jede Version habe ich einen Import getestet, aber er hat nicht funktioniert. Möglicherweise liegt ein Problem mit der Datenbank vor. Deshalb wäre es sehr hilfreich, wenn Sie beim nächsten Mal einen vollständigen Import erfolgreich durchführen können. Falls es sich um die phpBB-Datenbank handelt, werde ich mit etwas Hilfe gründlich nachforschen. Wenn es am Skript liegt, kann ich warten. Vielen Dank für deine Nachricht!

1 „Gefällt mir“

Ich kann mich nicht mehr daran erinnern, wann ich das letzte Mal einen phpBB3-Import durchgeführt habe. Ich vermute (kann es aber nicht wissen), dass dies daran liegt, dass das Skript so gut funktioniert.

Da die Daten nun nach Discourse hochgeladen werden, liegt das Problem wahrscheinlich daran, wie sie in den Beiträgen von phpBB referenziert werden. Sehen Sie beim Ausführen des Skripts Fehlermeldungen? Diese könnten Hinweise geben. Vielleicht haben Plugins auch geändert, wie diese Elemente in den Beiträgen und/oder in der Datenbank gespeichert sind. Sie werden wahrscheinlich etwas recherchieren müssen.

2 „Gefällt mir“

Ich hatte ein paar „fehlende Dateien“ und „falsche Post-Zeitstempel“. Diese Probleme traten auch bei meinen vorherigen Importen auf, daher denke ich nicht, dass es sich um ein großes Problem handelt. Zudem habe ich beim ersten Durchlauf viele Meldungen zu „Eltern-Post existiert nicht“ erhalten, aber wie bereits in diesem Thread erwähnt, wird dies durch einen zweiten Durchlauf des Skripts behoben.

Ansonsten lief das Skript ziemlich gut, ohne größere Probleme.

Es gab ein Plugin (anscheinend hauptsächlich eine .htaccess-Datei; ich habe dieses Forum nicht selbst betrieben), das die Dateien in Unterordnern (nach Monaten und Jahren) anordnete. Ich habe sie jedoch im selben Ordner organisiert, und die Updates auf einer sauberen Version von phpBB funktionierten einwandfrei. Alle importierten Dateien waren auf phpBB 3.1 und 3.2 aktiv.

Ich werde mich etwas tiefer in die Datenbank einarbeiten; möglicherweise habe ich eine SQL-Datei aus einem früheren Import. Ich werde die Tabellen „Attachments“ und „Posts“ auf meinem Testserver vergleichen. Vielleicht habe ich etwas übersehen.

4 „Gefällt mir“

Du hast recht, es gab einen Fehler in TextProcessor::process_attachments, der dazu führte, dass Anhänge nicht in das Post-Markdown eingebettet wurden. Ich habe einen PR erstellt.

5 „Gefällt mir“

Gute Arbeit, nach den zwei Durchläufen sieht der Import großartig aus. Danke!

4 „Gefällt mir“

Hallo, ich habe gerade etwa 35.000 Beiträge importiert. Während des Imports fiel mir auf, dass häufig „Parent post XXXXXX doesn’t exist. Skipping" angezeigt wurde. Als der Prozess abgeschlossen war, sah ich im Discourse-Forum zwar alle (ich glaube) „Topics", aber keine Antworten. Praktisch wurden nur die Topics importiert, nicht jedoch die Beiträge (außer dem ersten, der den Text des Topics selbst enthielt).
Außerdem wurden keine Avatare importiert, obwohl ich sie im richtigen Verzeichnis unter dem Ordner „import" abgelegt habe.

Das ursprüngliche Forum basierte auf phpBB2, wurde regelmäßig importiert und war in phpBB3 mit allen seinen Beiträgen sichtbar. Ich habe jedoch zuvor viele alte Nachrichten gelöscht; in phpBB3 scheint jedoch alles in Ordnung zu sein.

Habt ihr einen Tipp? Gibt es ein Import-Skript, das ich überprüfen kann?

1 „Gefällt mir“

Das ist seit einigen Wochen/Monaten so, aber keine Sorge, der Import wird abgeschlossen, nachdem du den Befehl import_phpbb3.sh erneut ausgeführt hast.

3 „Gefällt mir“

Vielen Dank! Es hat bei den Beiträgen funktioniert, aber nicht bei den Avataren. Ich suche weiterhin nach einer Lösung.

1 „Gefällt mir“

Ich habe das Thema mehrmals gelesen und ein paar Migrationen durchgeführt, aber jedes Mal war ich mit diesem Plugin verwirrt und bin auf ähnliche Fehler gestoßen. Ich bin bei meiner dritten Migration und es hat mich verrückt gemacht. Ich denke, wie dieses Plugin funktioniert, kann Benutzer verwirren, die Migrationen durchführen.

Es sollte irgendwo angegeben werden, dass das Plugin nach dem Migrationsprozess in Discourse aktiviert werden sollte. Wenn es bereits irgendwo geschrieben steht, habe ich es vielleicht übersehen und diese Information sollte vielleicht hervorgehoben werden.

Bitte korrigieren Sie mich, wenn ich falsch liege. :slight_smile:

1 „Gefällt mir“

Ich melde eine Korrektur für die Smiley-Konvertierung beim Import von phpBB 3.0.7.

  • Einige Smileys wurden nicht richtig in Discourse konvertiert:


    (aber nicht immer, aus irgendeinem Grund; einige identische Emojis wurden manchmal angezeigt, manchmal nicht. Es schien zunächst zufällig zu sein)

  • Außerdem sind einige Emojis einfach verschwunden:
    phpBB:
    image
    Discourse:
    image

Das Problem lag im Regex, der in replace_smilies(text) von

verwendet wurde.

Fehlerhafter Regex:

<!-- s(\S+) --><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?:\S+ -->

Beachten Sie, wie der Anfang des Regex kein Doppelpunktzeichen danach annimmt:

<!-- s

Aber er nimmt einen am Ende des Regex an:

<!-- s?:

(Außerdem frage ich mich, warum es ein ? gibt, das 0 oder 1 des s-Zeichens am Ende des Regex abgleicht, wo es am Anfang des Regex keins gibt)

Ich habe diesen Doppelpunkt aus dem Regex entfernt und meine beiden Smiley-Probleme schienen vollständig behoben zu sein.

Auf meinem phpbb-Forum begannen viele Smileys tatsächlich mit einem Doppelpunkt wie :mrgreen: oder :evil:, aber einige nicht, wie 8-) oder ;)
Der alte Regex führte zu fehlerhaften Smiley-Erfassungen. Zum Beispiel wurden mehrere Smileys nebeneinander als einer erfasst.


Korrigierter Regex:

<!-- s(\S+) --><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?\S+ -->

Ich behebe den Code nicht direkt im Discourse-Repository, da ich nicht daran gewöhnt bin, Git zu benutzen, und auch nicht sicher bin, ob dies Importe aus anderen phpBB-Versionen beeinflussen würde. Ich möchte nichts durcheinanderbringen.


Auf jeden Fall, wenn Leute auf die gleichen Probleme stoßen wie ich, hier ist die Lösung.

4 „Gefällt mir“

Ein weiteres Problem wurde behoben, das Personen in meinem Fall während einer phpBB 3.0.7-Migration helfen könnte.

Aus irgendeinem Grund enthielten meine phpBB-Forum-Beitragsinhalte manchmal mehrere Leerzeichen am Anfang von Zeilen. Ich vermute, dass einige Benutzer beim Verfassen ihrer Nachrichten gerne hektisch die Leertaste drücken, ohne darauf zu achten, und das war unwichtig, da die gerenderte Seite diese Mehrfachleerzeichen ignorierte:

Roher phpBB-Textinhalt:

Salut tous  :)
  
     Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK  :evil: mais il a fait ces 2000 kms sans broncher ;)  
Maintenant le CT est OK . Merci L'Atelier Du Raz  8-')

    Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans  :roll: 
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !? 
What's About ?

             Je trouve ça un peu limte  :evil: 
Merci tous, fred

Gerenderte Seite im Browser:


Aber während des Imports von phpBB → Discourse wurden diese vorhandenen Leerzeichen in Codeblöcke umgewandelt:

So sollte es angezeigt werden:


Ich habe es behoben, indem ich einen Regex hinzugefügt habe, der Leerzeichen am Anfang jeder Zeile entfernt

 text.gsub!(/^[^\\S\\r\\n]+/, "\\n")

Ich habe dies kurz vor process_smilies(text) in dieser Datei hinzugefügt:


Ein weiteres Problem, auf das ich gestoßen bin.
In diesem Code (immer noch in text_processor.rb):

    def clean_bbcodes(text)
      # Many phpbb bbcode tags have a hash attached to them. Examples:
      #   [url=https://google.com:1qh1i7ky]click here[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Some text.[/quote:b0wtlzex]
      text.gsub!(/:(?:\\w{8})\\]/, ']')

In meiner Datenbank sind die Längen dieser Hashes zwischen 5 und 8 Zeichen, aber der Regex entfernt nur Hashes, die genau 8 Zeichen lang sind. Daher behielt mein Import kürzere Hashes anstelle der Entfernung bei.
Ich habe dies behoben, indem ich den Regex geändert habe zu:

text.gsub!(/:(?:\\w{5,8})\\]/, ']')

Ich füge ein kleines Problem hinzu, immer noch in derselben Datei. Der Regex, der [color] BBCode-Tags entfernt, erwartet einen Hexadezimalwert, dem ein obligatorisches # vorangestellt ist. Aber [color] akzeptiert auch Zeichenfolgen wie “red”, “blue” usw. als Wert. Daher habe ich den ursprünglichen Regex geändert:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#[a-z0-9]*)?\\]/i, "")

Indem ich ein ? nach dem # hinzugefügt habe, um das # optional zu machen.
Behobener Code:

      # remove color tags
      text.gsub!(/\\[\\/?color(=#?[a-z0-9]*)?\\]/i, "")

Ich weiß nicht, ob meine Probleme bei phpBB-Importen üblich sind oder ob sie sehr spezifisch für meinen Fall sind. Wenn letzteres der Fall ist, hoffe ich, dass meine Erklärungen hier nicht unerwünscht oder überflüssig sind. Lassen Sie es mich einfach wissen, wenn dies der Fall ist, damit es nicht peinlich wird. :grinning_face_with_smiling_eyes:


Bearbeiten: Ist es möglich, dass nach einer Migration alle vorhandenen Themen für jeden vorhandenen Benutzer als “gelesen” markiert werden?

Das Ziel ist es zu verhindern, dass nach der Migration vorhandene Benutzer, die auf vorhandene (und manchmal alte) Themen klicken, zum ersten Beitrag in diesen Themen gelangen, die sie bereits vor der Migration gelesen haben.

Idealerweise würden vorhandene Benutzer, die auf vorhandene Themen klicken, nicht den ersten, sondern den letzten Beitrag öffnen (seit dem Ende der Migration, natürlich).

Es ist jedoch ein kleines Problem mit der Lebensqualität (und es wird sich nach ein paar Wochen, wenn die Benutzer das Forum nutzen und Themen lesen, natürlich von selbst erledigen), aber ich wurde nach diesem Vorschlag gefragt.

7 „Gefällt mir“

Vielen Dank, dass Sie diese Korrekturen teilen!

Ich musste ähnliche Anpassungen an Regexes für frühere Migrationen vornehmen, daher werden diese für zukünftige phpbb-Importe hilfreich sein.

Dieses Thema könnte hilfreich sein: How to mark imported posts as read - #2 by stuwest

3 „Gefällt mir“