Ich entschuldige mich bei jedem, der sich durch diesen Beitrag angegriffen fühlt, denn ehrlich gesagt kämpfe ich seit Montag mit diesen Problemen und bin es leid, den Discourse-Code zu debuggen/hotfixen.
Nach dem n-ten Versuch (habe nach dem 7. aufgehört zu zählen) denke ich, dass ich aufgeben werde, denn es scheint, dass die Migration keine Sache ist, in die Discourse viel Zeit investiert hat, um sie zu unterstützen.
Ich glaube, das größte Problem ist, dass die in dieser riesigen Datenbank verwendete Zeichenkodierung utf8mb4 ist, die vom Skript(?) nicht unterstützt wird.
Die Verwendung von utf8 (Standard) erzeugt einfach viele Fehler, die gemeldet werden, aber es ist nicht klar, was passiert, da das Skript trotzdem weiterläuft. Wird der Eintrag in der DB übersprungen? Wird er mit nicht unterstützten Zeichen kopiert (die klassischen Quadrate)?
Darüber hinaus haben die drei verschiedenen letzten Durchläufe (mit den Massenimporteuren) mit exakt den gleichen Anweisungen unterschiedliche Ergebnisse. Dieser letzte Durchlauf erreichte den Import von Themen, begann sofort mit der Meldung von Fehlern, lief aber weiter (???):
Anwendung wird geladen...
Startet...
I18n wird vorgeladen...
Höchste Beitragsnummern werden korrigiert...
Importierte Gruppen-IDs werden geladen...
Importierte Benutzer-IDs werden geladen...
Importierte Kategorie-IDs werden geladen...
Importierte Themen-IDs werden geladen...
Importierte Beitrags-IDs werden geladen...
Gruppenindizes werden geladen...
Benutzerindizes werden geladen...
Kategorieindizes werden geladen...
Themenindizes werden geladen...
Beitragsindizes werden geladen...
Beitragsaktionsindizes werden geladen...
Kategorien werden importiert...
Übergeordnete Kategorien werden importiert...
5 - 1104/Sekunde
Untergeordnete Kategorien werden importiert...
500 - 1539/SekundeFEHLER: doppelter Schlüsselwert verletzt eindeutige Einschränkung „unique_index_categories_on_name“
DETAIL: Schlüssel (COALESCE(parent_category_id, '-1'::integer), name)=(-1, Armata Brancaleone) existiert bereits.
KONTEXT: COPY categories, Zeile 69
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:204:in `get_last_result'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:204:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:361:in `create_categories'
script/bulk_import/vbulletin5.rb:291:in `import_categories'
script/bulk_import/vbulletin5.rb:69:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
Themen werden importiert...
600 - 4073/Sekunde
FEHLER: undefinierte Methode `[]' für nil:NilClass
/var/www/discourse/script/bulk_import/base.rb:513:in `process_topic'
/var/www/discourse/script/bulk_import/base.rb:724:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:364:in `create_topics'
script/bulk_import/vbulletin5.rb:321:in `import_topics'
script/bulk_import/vbulletin5.rb:70:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
bis es schließlich abstürzt mit:
script/bulk_import/vbulletin5.rb:779:in `<main>'
572329 - 531/Sekunde
Antworten werden importiert...
client_loop: send disconnect: Connection reset
Aber nicht bevor ständig diese beiden Fehler gemeldet wurden:
FEHLER: undefinierte Methode `gsub!' für nil:NilClass
script/bulk_import/vbulletin5.rb:727:in `preprocess_raw'
script/bulk_import/vbulletin5.rb:369:in `block in import_topic_first_posts'
/var/www/discourse/script/bulk_import/base.rb:723:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:367:in `create_posts'
script/bulk_import/vbulletin5.rb:361:in `import_topic_first_posts'
script/bulk_import/vbulletin5.rb:71:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
und
FEHLER: ungültige Byte-Sequenz in UTF-8
script/bulk_import/vbulletin5.rb:727:in `gsub!'
script/bulk_import/vbulletin5.rb:727:in `preprocess_raw'
script/bulk_import/vbulletin5.rb:369:in `block in import_topic_first_posts'
/var/www/discourse/script/bulk_import/base.rb:723:in `block (2 levels) in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/bulk_import/base.rb:721:in `block in create_records'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.5/lib/pg/connection.rb:196:in `copy_data'
/var/www/discourse/script/bulk_import/base.rb:720:in `create_records'
/var/www/discourse/script/bulk_import/base.rb:367:in `create_posts'
script/bulk_import/vbulletin5.rb:361:in `import_topic_first_posts'
script/bulk_import/vbulletin5.rb:71:in `execute'
/var/www/discourse/script/bulk_import/base.rb:98:in `run'
script/bulk_import/vbulletin5.rb:779:in `<main>'
Bitte beachten Sie, dass ich Schritt für Schritt vorgegangen bin, indem ich kommentiert habe, welche Funktion ausgeführt werden soll, dann rake import:ensure_consistency ausgeführt habe, bevor ich mit dem Kommentieren der bereits ausgeführten Funktionen fortgefahren bin, und so weiter, denn wenn ich das gesamte Skript einfach wiederholen lasse, stürzt es einfach ab, indem es doppelte IDs findet.
Bevor das übliche Argument „man kann sich nicht über kostenlose Software beschweren“ aufkommt, möchte ich klarstellen, dass ich zu anderen Open-Source-Projekten beigetragen habe und ebenfalls kostenlose Software entwickle, aber es ist mir äußerst wichtig, dass, wenn ich etwas veröffentliche, es funktioniert und gut dokumentiert ist (auch nur, um die Tausenden von Nachrichten zu vermeiden, die zu Recht fragen: „Wie funktioniert das?“) oder ich bin bereit, jeden aufkommenden Fehler zu beheben.
Während Discourse eine großartige Out-of-the-Box-Erfahrung zu bieten scheint, sollte klar sein, dass wir uns im Jahr 2022 befinden und Gemeinschaften lange vor diesem Produkt existierten. „Adoption“ würde eine starke Migrationsunterstützung erfordern, und das scheint derzeit nicht der Fall für Discourse zu sein.
Ich erkenne an, dass eine 20-GB-Datenbank ein Ausnahmefall ist, aber wir haben hier keine Probleme mit der Größe, sondern eher mit der Zeichenkodierung oder was auch immer, da es nicht einmal einen konstanten Fehler gibt und die meiste Dokumentation besteht darin, Fäden und Beiträge zu jagen, die von denen hinterlassen wurden, die die gleiche Tortur in der Vergangenheit durchgemacht haben, in der Hoffnung, dass ein Workaround gefunden wurde und dass der Quellcode sich seitdem nicht wesentlich geändert hat.
Zu diesem Zeitpunkt würde ich jedem, der von vBulletin kommt, dringend empfehlen, mit der Migration zu warten, bis die Überarbeitung des Migrationsskripts (die anscheinend im Gange ist?) abgeschlossen ist.