Migrieren Sie ein FluxBB-Forum zu Discourse

Ich habe ein Migrationsskript erstellt, um eine FluxBB-Datenbank in Discourse zu importieren. Im Folgenden erkläre ich den Importprozess in einer schrittweisen Anleitung.

Ich habe dieses Migrationsskript mit FluxBB v1.5.10 getestet (aktuellste Version).

Welche Daten können importiert werden?

  • Benutzer (einschließlich Biografien und Signaturen)
  • Gruppen
  • Kategorien
    :warning: Berechtigungen werden nicht importiert; alle Kategorien sind öffentlich. Die richtigen Berechtigungen müssen nach dem Import manuell gesetzt werden.
  • Themen (einschließlich Anheften/Pinning-Status)
  • Beiträge
  • suspendierte Benutzer

Bevor Sie mit der Migration beginnen, richten Sie eine Entwicklungsumgebung auf Ihrem Rechner (oder in einer virtuellen Maschine) ein. Beachten Sie dazu die Installationsanleitungen für die Entwicklung unter macOS oder Ubuntu.

Discourse erfordert Ruby 3.4+. Um Ihre Ruby-Version zu überprüfen, geben Sie den folgenden Befehl ein:

ruby -v

MySQL

Nun benötigen wir das mysql2-Gem für Ruby, um eine Verbindung zu unserer alten FluxBB-Datenbank herzustellen. Führen Sie die folgenden Befehle aus, um die Abhängigkeit libmysqlclient-dev und das mysql2-Gem zu installieren.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libmysqlclient-dev
gem install mysql2

(optional) Importieren eines MySQL-Dumps in localhost

Um den MySQL-Client zu installieren und eine MySQL-Dump-Datei (.sql) auf Ihren Entwicklungsrechner zu importieren, befolgen Sie die folgenden Anweisungen:

sudo apt-get install mysql-server mysql-client

Erstellen Sie einen MySQL-Benutzer, erteilen Sie Berechtigungen und erstellen Sie eine Tabelle:

mysql -u root -p mysql
mysql> CREATE USER 'fluxbb'@'localhost' IDENTIFIED BY 'fluxbb';
Query OK, 0 rows affected (0.00 sec)
.
mysql> CREATE DATABASE fluxbb;
Query OK, 1 row affected (0.01 sec)
.
mysql> GRANT ALL PRIVILEGES ON fluxbb.* TO 'fluxbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
.
mysql> exit

Importieren Sie Ihre FluxBB-Datenbank-Dump-Datei:

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode zu Markdown

Das Importskript übernimmt die Konvertierung von BBCode zu Markdown automatisch. Dafür sind keine zusätzlichen Gems erforderlich.


Nach der Installation von mysql2 wechseln Sie in das Verzeichnis Ihrer Discourse-Installation und öffnen die Gemfile-Datei zur Bearbeitung:

cd ~/discourse
sudo nano Gemfile

Fügen Sie nun am Ende der Datei die folgende Zeile ein, um das mysql2-Gem zu Discourse hinzuzufügen:

gem 'mysql2'

Bevor Sie das Importskript ausführen, fügen Sie diese Zeilen nacheinander in Ihre Shell ein (verwenden Sie die Pfeiltasten, um die Werte zu bearbeiten):

export FLUXBB_HOST="localhost"
export FLUXBB_DB="fluxbb"
export FLUXBB_USER="root"
export FLUXBB_PW=""
export FLUXBB_PREFIX=""

Nun ist es soweit, das Importskript auszuführen. Starten Sie die Migration mit dem folgenden Befehl:

RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb

Warten Sie, bis der Import abgeschlossen ist. Falls der Prozess sehr langsam wird, können Sie ihn neu starten.

Nach Abschluss: Herzlichen Glückwunsch! Ihre Datenbank wurde erfolgreich von FluxBB zu Discourse migriert :thumbsup:

Starten Sie Ihre Discourse-Instanz:

bundle exec rails server

Starten Sie Sidekiq und lassen Sie es seine Arbeit erledigen:

bundle exec sidekiq -q critical,4 -q default,2 -q low

Je nach Größe Ihres Forums kann dies einige Zeit in Anspruch nehmen. Sie können den Fortschritt unter http://localhost:3000/sidekiq überwachen.

Erstellen Sie nun über die Admin-Seite unter /admin/backups ein Backup und importieren Sie dieses auf Ihrer Live-Discourse-Website.

12 „Gefällt mir“
discourse@app-deb10-app:/var/www/discourse$ FLUXBB_HOST="localhost" FLUXBB_DB="flux" FLUXBB_USER="fluxbb" FLUXBB_PW="fluxbb" RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb 
Lade vorhandene Gruppen...
Lade vorhandene Benutzer...
Lade vorhandene Kategorien...
Lade vorhandene Beiträge...
Lade vorhandene Themen...

Erstelle Gruppen
Traceback (most recent call last):
	9: from script/import_scripts/fluxbb.rb:262:in `<main>'
	8: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
	7: from script/import_scripts/fluxbb.rb:40:in `execute'
	6: from script/import_scripts/fluxbb.rb:50:in `import_groups'
	5: from script/import_scripts/fluxbb.rb:258:in `mysql_query'
	4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/db/mysql2/alias_method.rb:22:in `query'
	3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query': Tabelle 'flux.groups' existiert nicht (Mysql2::Error)

Es sieht so aus, als ob die Tabellen in der mySQL-Datenbank nicht existieren. Ich würde zuerst prüfen, indem ich mich in die mySQL-Datenbank einlogge und sehe, welche Tabellen vorhanden sind. Möglicherweise musst du das Skript anpassen, damit es funktioniert.

2 „Gefällt mir“

Hier ist alles Schritt für Schritt.

Ist dieser Importer in modernen Discourse-Versionen defekt?

Ich betreibe eine Discourse-Instanz, die gemäß discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (auch bekannt als „Die einzig offiziell unterstützten Installationen von Discourse“) installiert wurde.

Ich habe eine MariaDB-Datenbank innerhalb des Docker-Containers eingerichtet, meinen Foren-Dump dort importiert usw., da jeder andere Ansatz sehr schwer einzurichten ist. Alles, was ich getan habe, geschah innerhalb der Shell cd /var/discourse/ & ./launcher enter app.

Wenn ich bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md ausführe, schlägt dies mit folgender Fehlermeldung fehl:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client
': We could not find your database: discourse. Which can be found in the database configuration file located at config/database.yml. (ActiveRecord::NoDatabaseError)

Wenn ich sudo -u postgres psql discourse in derselben Shell ausführe, werde ich problemlos in die Datenbank „discourse“ eingeloggt.

Entschuldigen Sie die negative Annahme, es war einfach:

Das Skript soll mit dem discourse-Benutzer ausgeführt werden, nicht als Root im Container, was ich getan habe.

Bis auf einige nicht konvertierte BB-Codes scheint dies gut funktioniert zu haben. Danke!

Tests, fixes, and a small (optional) feature to allow a FluxBB config to work by harry-wood · Pull Request #6 · nlalonde/ruby-bbcode-to-md · GitHub scheint ein guter PR mit Korrekturen zur BB-Code-Konvertierung zu sein.

Riesige Warnung:

Berechtigungen werden von diesem Importeur ignoriert.

Alle Ihre Foren werden als öffentlich gepostet.

Wenn Sie Foren hatten, die nur für Moderatoren lesbar waren, sind diese nach der Verwendung dieses Importeurs für jeden lesbar.

1 „Gefällt mir“

Sie können die Berechtigungen der Kategorien nach dem Import von Hand ändern. Es wäre wahrscheinlich keine große Aufgabe, sie von Hand zu korrigieren.

Das Hinzufügen der Unterstützung für den Import der Berechtigungen ist wahrscheinlich eine größere Aufgabe als die manuelle Korrektur.

1 „Gefällt mir“

Vielen Dank für Ihre Meldung, ich habe eine Warnung dazu in den Leitfaden aufgenommen.

2 „Gefällt mir“