Ist es möglich, phpBB-Foren in ein bestehendes Discourse-Forum zu importieren, d. h. sie zusammenzuführen? Ich gehe davon aus, dass dies von den Einstellungen zur Zuordnung von Kategorien abhängt.
Gibt es Probleme, auf die man achten sollte?
Werden Benutzer zusammengeführt, wenn sie dieselbe E-Mail-Adresse haben?
Ja. Wenn Sie Ihre eigene Kategorienzuordnung nicht in der Einstellungsdatei vornehmen, werden neue Kategorien während des Imports nach Bedarf erstellt. Wenn bereits eine vorhandene Kategorie in Discourse mit einem Kategorienamen aus phpBB übereinstimmt, werden die Kategorien zusammengeführt.
Oh ja. Hier ist ein Thread, der beschreibt, was ich erlebt habe. Ich habe einige Tipps und auch ein Repository mit meinen kombinierten Updates für den Importer.
Ich erinnere mich nicht mehr an die genauen Bedingungen, aber ja, Benutzer werden während des Imports automatisch zusammengeführt.
Ich bin neugierig, ob es möglich ist, ein phpbb3-Forum in Discourse zu integrieren, wobei alle importierten Themen schreibgeschützt bleiben. Ich habe den Thread durchsucht, aber nichts dergleichen gefunden. Danke.
Sie könnten das Importskript so ändern, dass alle erstellten Themen archiviert werden, oder es ist einfacher, dies nach Ausführung des Skripts in großen Mengen zu tun. Beispiele finden Sie unter Administrative Bulk Operations.
Ich scheine ein Problem zu haben, wenn ich den Importer starte. Es scheint während des Benutzerimports oder kurz danach aufzutreten. Ich habe den Stacktrace und ein kurzes 20-Sekunden-Video der Ausgabe beigefügt.
Bitte um Rat.
0x00007fe87a88bb10 /var/www/discourse/script/import_scripts/phpbb3/importers/user_importer.rb:87>}
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/validations.rb:80:in `raise_validation_error': Validation failed: Name can't be blank (ActiveRecord::RecordInvalid)
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/validations.rb:53:in `save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:302:in `block in save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/database_statements.rb:314:in `transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:302:in `save!'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/suppressor.rb:54:in `save!'
from /var/www/discourse/script/import_scripts/base.rb:361:in `block in create_user'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/transactions.rb:209:in `transaction'
from /var/www/discourse/script/import_scripts/base.rb:360:in `create_user'
from /var/www/discourse/script/import_scripts/base.rb:278:in `block in create_users'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.1/lib/patches/db/mysql2/alias_method.rb:8:in `each'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.1/lib/patches/db/mysql2/alias_method.rb:8:in `each'
from /var/www/discourse/script/import_scripts/base.rb:266:in `create_users'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:106:in `block in import_anonymous_users'
from /var/www/discourse/script/import_scripts/base.rb:948:in `block in batches'
from /var/www/discourse/script/import_scripts/base.rb:947:in `loop'
from /var/www/discourse/script/import_scripts/base.rb:947:in `batches'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:293:in `batches'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:102:in `import_anonymous_users'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:33:in `execute'
from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
from /var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
from script/import_scripts/phpbb3.rb:35:in `<module:PhpBB3>'
from script/import_scripts/phpbb3.rb:16:in `<module:ImportScripts>'
from script/import_scripts/phpbb3.rb:15:in `<main>'
EDIT:
Es scheint etwas mit anonymen Benutzern zu tun zu haben. Ich glaube, ich werde meine Datenbank überprüfen.
EDIT
Ich konnte den Fehler beheben, indem ich diese Zeile in der Methode map_anonymous_user geändert habe. Es stellte sich heraus, dass der Standardwert darin bestand, den Benutzernamen als leeren String festzulegen. Ich habe also einfach ein Wort hinzugefügt.
Kann ich alte Beiträge löschen, bevor ich einen inkrementellen Import durchführe? Ich habe den Import erfolgreich lokal in einer Entwicklungsinstallation ausgeführt und ihn auf meinem Server mit einer Docker-Installation wiederhergestellt. Mein Plan ist, dort einen Import für neue Beiträge durchzuführen. Aber selbst wenn ich die bereits importierten Beiträge ignoriere, dauert der Import auf dem Server Stunden. Mein Forum ist ziemlich groß (1,3 Mio. Beiträge) und die Festplatte meines Servers ist langsam, sodass das reine Laden der .sql-Datei Stunden dauert.
Verursacht es Probleme, wenn ich lokal etwas wie DELETE FROM phpbb_posts WHERE post_id < 2926807 ausführe und dies dann auf den Server hochlade und den Import wie gewohnt durchführe?
Ich habe eine IMPORT_AFTER-Einstellung zu einigen Skripten hinzugefügt, um nur Daten nach einem bestimmten Datum abzurufen. Daher würde ich die SQL-Abfrage, die die Beiträge abruft, so ändern, dass nur die Beiträge nach einem Tag vor dem letzten Daten-Dump abgerufen werden.
Aber wenn Sie eine sehr langsame Festplatte haben, werden Sie wahrscheinlich Schwierigkeiten haben, Discourse zu hosten. Ist die Leistung mit den vorhandenen Daten akzeptabel?
Ja, für den normalen Gebrauch werde ich eine schnellere Festplatte verwenden, aber sie ist nicht groß genug, um mehrere Kopien der Datenbank gleichzeitig zu hosten. Daher leite ich /shared/import im Abschnitt volumes von import.yml auf eine größere, langsamere Festplatte um. Der Trick funktionierte gut für die Wiederherstellung des ursprünglichen Backups. Ich habe /shared/tmp nach der Wiederherstellung, die fehlschlug, weil der Speicherplatz ausging, obwohl ich 18 GB frei und eine 6 GB große Datenbank hatte (ich glaube, ich habe woanders gelesen, dass die Wiederherstellung während der Ausführung 3 Kopien der Datenbank erstellt), auf die langsame Festplatte umgeleitet. Aber zu diesem Zeitpunkt war die Ausfallzeit kein Problem.
Daher sind Größe und Geschwindigkeit im täglichen Gebrauch kein Problem, mein Forum ist ziemlich ruhig, es ist nur alt.
Ich werde mir ansehen, wie ich die SQL-Abfragen in den Skripten modifizieren kann. Danke!
Der Datenbankname sollte im schema-Parameter angegeben werden. Der Name dieses Parameters ist zwar etwas verwirrend. Sie können hier im Code sehen, dass er als Datenbankname übergeben wird.
Hallo. Gibt es eine Möglichkeit, den Import Zeile für Zeile auszuführen? Wir haben Probleme damit, dass das Skript nicht abgeschlossen wird. Einige Dinge funktionieren, wie Benutzer und Avatare, andere nicht. Ich habe meinen Server etwa 4 Mal neu aufgesetzt, weil ich irgendwo gelesen habe, dass nach einem fehlgeschlagenen Import eine Neuinstallation erforderlich ist.
Weitere Details finden Sie in dem von mir geposteten Video. Jede Hilfe wird geschätzt.
Hallo. Ich bin jetzt etwa 18 Stunden mit der Migration beschäftigt und bin keinen Schritt weiter, um die Migration zum Laufen zu bringen. Könnten Sie sich bitte mein Video ansehen und mir Ratschläge geben, ob Sie Tipps oder Tricks haben oder ob etwas bei der Konfiguration fehlt. Wir brauchen nur Beiträge, Themen, private Nachrichten, Kategorien. Avatare und Benutzer funktionieren. Der Server ist ein sauberes UBUNTU 22.04.
Eine einfachere Lösung ist, nach dem Erstellen der Website ein Backup zu erstellen, damit Sie dieses wiederherstellen können. Eine weitere Möglichkeit, eine saubere Datenbank zu erhalten, ist die Ausführung von rake db:drop db:create db:migrate, aber dazu müssen Sie ein paar Dinge tun, um dies zu ermöglichen. Wenn Sie diese Dinge nicht anhand der Fehlermeldungen erraten können, ist die Backup/Restore-Lösung der richtige Weg, und sie ist möglicherweise sowieso schneller.
Sie können dort einige Debugging-puts-Anweisungen hinzufügen, obwohl die Struktur des phpbb3-Skripts für Leute, die Ruby nicht gut kennen, etwas verwirrend ist.
Außerdem können Sie das Skript mehrmals ausführen, und es überspringt die Dinge, die es bereits erledigt hat. Sie müssen die Datenbank also nicht wirklich löschen, bis Sie etwas geändert haben, das einen Neuanfang erfordert (d. h. es wird etwas anderes mit den bereits importierten Daten tun).
Das übersteigt meine kostenlosen Möglichkeiten. Wenn Sie ein Budget haben, können Sie mich direkt kontaktieren oder im Marketplace posten.
Das Importskript scheint nicht zu funktionieren. Das Problem liegt im Video. Wenn sich jemand von Discourse Migrations darum kümmern könnte, wäre das sehr hilfreich.
Wenn der Support kostenpflichtig ist, könnten Sie dann die Kosten für die Migration auflisten? Nach meinem Verständnis ist dies der Ort, an dem wir Fragen stellen, wie wir das Skript zum Laufen bringen können. Ich habe kein Problem mit Gebühren, ich dachte nur, dies sei ein Open-Source-Projekt und dies sei der Ort, an dem wir Fragen stellen.
Ich sage, dass ich hier ein Freiwilliger bin und nicht bereit bin, kostenlos ein Video anzusehen, hauptsächlich wegen meiner irrationalen Verachtung für Videos. Aber ich bin nicht der Einzige hier. Viele Leute lieben es, Videos anzusehen.
Also erstellt es jedes Mal, wenn es ausgeführt wird, Duplikate der Benutzer, die es in der vorherigen Ausführung erstellt hat? Ich kann mir nicht vorstellen, wie das sein kann. Bist du sicher? So sollte es nicht funktionieren.
Es wird so aussehen, als ob die Dinge erneut importiert werden, aber es geht viel schneller, da es eigentlich nichts tut, da Dinge, die bereits importiert wurden, ein benutzerdefiniertes Feld import_id haben, das verhindert, dass sie erneut importiert werden. Wenn Daten bei jeder Ausführung dupliziert werden, dann ist etwas sehr Seltsames falsch.
Das ist es. Manchmal brauchen oder wollen Leute mehr Hilfe, als sie kostenlos bekommen können.
Verstanden. Könnten Sie bitte Ihre Gebühren für die Migration veröffentlichen? Ich verstehe, dass das Skript anscheinend nicht funktioniert und kostenpflichtiger Support erforderlich ist. Das ist für mich völlig in Ordnung.
Migrationen sind ziemlich komplex. Jede hat ihre eigenen Herausforderungen, da die Daten jedes Forums einzigartig sind. Die Fehlersuche bei einem Migrationsproblem kann Stunden dauern und erfordert eine eingehende Untersuchung der Protokolle, der Datenbank, des Codes usw. Es ist schwierig, dies nur anhand dieser Beiträge zu beurteilen, entschuldigen Sie, dass ich nicht mehr helfen kann! Hier ist unsere FAQ zu Migrationen: Migrating to Discourse | Discourse - Civilized Discussion
Vielen Dank für den Link. Ich glaube, ich habe das Problem herausgefunden und das Importskript läuft jetzt. Ich bin gerade bei etwa 100000/666357 Beiträgen. ChatGPT war hilfreich bei der Identifizierung einiger fehlerbasierter Berechtigungsfehler und dergleichen.