Wenn Sie ein altes Phorum-Forum haben und über eine Migration zu Discourse nachdenken, ist dieses Tutorial genau das Richtige für Sie. Der Prozess ist unkompliziert, und wir verwenden das offizielle Phorum-Import-Skript. Legen wir los.
Auf hoher Ebene werden wir Folgendes tun:
- Vorbereitung der lokalen Entwicklungsumgebung.
- Exportieren der Datenbank aus der Produktionsumgebung.
- Importieren der Produktionsdatenbank in eine lokale Discourse-Instanz.
- Ausführen des Phorum-Import-Skripts.
Was migriert werden kann
- Kategorien
- Alle Foren und Ordner => Stammkategorie
- Themen & Beiträge
- Benutzer (mit folgenden Attributen)
- Sperrstatus
- Benutzername
- Vor- und Nachname => Name
- Admin-Status
- Hinzugefügt am
- Zuletzt aktiv
Vorbereitung der lokalen Entwicklungsumgebung
Folgen Sie einer dieser Anleitungen, um Discourse selbst zu installieren, und konsultieren Sie diese Anleitung, falls Sie Probleme haben.
Installieren Sie einen MySQL-Datenbankserver;
Ubuntu 18.04:
$ sudo apt update
$ sudo apt install mysql-server -y
Nach Abschluss der MySQL-Installation überprüfen Sie den Status:
$ systemctl status mysql.service
Falls er nicht läuft, führen Sie Folgendes aus:
$ sudo systemctl start mysql
MacOS:
$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
Überprüfen Sie den Status der Dienste:
$ brew services list
Sie sollten etwas Ähnliches wie Folgendes sehen:
...
mysql@5.7 started
...
Andernfalls führen Sie Folgendes aus und überprüfen erneut:
$ brew services start mysql@5.7
Für Windows können Sie sich an den offiziellen Installationsleitfaden halten.
Diese Umgebung wird unser Discourse-Server sein.
Exportieren der Datenbank aus der Produktionsumgebung:
Exportieren Sie die Produktionsdatenbank (vom Phorum-Produktionsserver):
$ mysqldump -u BENUTZERNAME -p DATENBANKNAME > phorum_dump.sql
Kopieren Sie den Datenbank-Dump auf den Discourse-Server.
Verwenden Sie
scpoderrsync, um die Datenbank zu kopieren. Sie können sie natürlich auch vorher gzipen.
Importieren der Produktionsdatenbank in den Discourse-Server
Auf dem Discourse-Server erstellen Sie eine Datenbank:
$ mysql -u root
Wenn Ihr Datenbankbenutzer ein Passwort hat, sollten Sie Folgendes verwenden:
mysql -u root -pund dann Ihr Passwort eingeben.
mysql> CREATE DATABASE phorum;
Stellen Sie sicher, dass die Datenbank erstellt wurde:
mysql> SHOW DATABASES;
Sie sollten etwas Ähnliches wie Folgendes sehen:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| phorum |
| sys |
+--------------------+
5 rows in set (0.04 sec)
Dies ist eine leere Datenbank. Unser nächster Schritt ist der Import der Produktionsdatenbank darin.
$ mysql -u root phorum < phorum_dump.sql
Da wir schon dabei sind, holen wir uns die Tabellenvorlage. Wir werden sie später benötigen:
$ mysql -u root
mysql> USE phorum;
mysql> SHOW TABLES;
Sie werden etwas Ähnliches wie Folgendes sehen:
+---------------------------+
| Tables_in_phorum |
+---------------------------+
| pw_banlists |
| pw_files |
| pw_forum_group_xref |
| pw_forums |
| pw_groups |
| pw_messages |
| pw_messages_edittrack |
| pw_pm_buddies |
| pw_pm_folders |
| pw_pm_messages |
| pw_pm_xref |
| pw_search |
| pw_settings |
| pw_subscribers |
| pw_user_custom_fields |
| pw_user_group_xref |
| pw_user_newflags |
| pw_user_permissions |
| pw_users |
+---------------------------+
19 rows in set (0.00 sec)
Aus der obigen Ausgabe können Sie erkennen, dass die Vorlage pw_ ist.
Ausführen des Phorum-Import-Skripts
Installieren Sie zuerst die Abhängigkeiten des Importers:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install
Konfigurieren wir nun das Skript entsprechend unseren Anforderungen. In unserem Beispiel reicht Folgendes:
PHORUM_DB = "phorum"
TABLE_PREFIX = "pw_"
BATCH_SIZE = 1000
# ...
host: "localhost",
username: "root",
password: "", # Ändern Sie dies, wenn Sie ein Passwort für die MySQL-Datenbank haben
database: PHORUM_DB
Wenn Sie eine URL-Weiterleitung erstellen möchten, sollten Sie Folgendes auskommentieren:
# categories.each do |category|
# Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
# end
#...
# results.each do |post|
# if post['parent_id'] == 0
# topic = topic_lookup_from_imported_post_id(post['id'].to_i)
# Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
# end
# end
Es wird dann so aussehen:
categories.each do |category|
Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
end
#...
results.each do |post|
if post['parent_id'] == 0
topic = topic_lookup_from_imported_post_id(post['id'].to_i)
Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
end
end
Führen Sie den Importer mit einer sauberen Discourse-Instanz aus:
bundle exec rake db:drop db:create db:migrate
bundle exec ruby script/import_scripts/phorum.rb
Der Importer verbindet sich mit dem MySQL-Server und migriert unsere Phorum-Datenbank in die Discourse-Datenbank.
Starten Sie den Discourse-Server, nachdem der Importer mit dem Import fertig ist:
$ bundle exec rails server
Starten Sie Sidekiq, um die migrierten Daten zu verarbeiten:
$ bundle exec sidekiq
Sie können den Fortschritt von Sidekiq unter
http://localhost:3000/sidekiq/queuesüberwachen.
Richten Sie Ihren Discourse-Produktionsserver ein, indem Sie diesem Tutorial folgen.
Erstellen Sie ein Backup der Discourse-Datenbank und laden Sie es gemäß diesem Tutorial auf Ihren Discourse-Produktionsserver hoch.
Es ist erledigt ![]()