Se hai un vecchio forum Phorum e stai pensando di migrare a Discourse, questo tutorial è per te. Il processo è semplice e utilizzeremo lo script ufficiale Phorum Importer. Iniziamo.
A un livello generale, faremo quanto segue:
- Preparazione dell’ambiente di sviluppo locale.
- Esportazione del database dall’ambiente di produzione.
- Importazione del database di produzione in un’istanza locale di Discourse.
- Esecuzione dello script Phorum importer.
Cosa può essere migrato
- Categorie
- Ogni forum e cartella =\u003e Categoria radice
- Topic e Messaggi
- Utenti (con i seguenti attributi)
- stato di sospensione (banned)
- nome utente
- nome reale =\u003e nome
- stato di amministratore
- data di aggiunta
- ultima attività
Preparazione dell’ambiente di sviluppo locale
Segui una di queste guide per installare Discourse e consulta questa guida se riscontri problemi.
Installa il server MySQL DB;
Ubuntu 18.04:
$ sudo apt update
$ sudo apt install mysql-server -y
Dopo aver completato l’installazione di MySQL, verifica il suo stato:
$ systemctl status mysql.service
Se non è in esecuzione, esegui il seguente comando:
$ sudo systemctl start mysql
MacOS:
$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' \u003e\u003e ~/.bash_profile
$ source ~/.bash_profile
Verifica lo stato dei servizi:
$ brew services list
Dovresti vedere qualcosa di simile a questo:
...
mysql@5.7 started
...
In caso contrario, esegui il comando seguente e verifica di nuovo:
$ brew services start mysql@5.7
Per Windows, puoi seguire la guida ufficiale all’installazione.
Questo ambiente sarà il nostro server Discourse.
Esportazione del database dall’ambiente di produzione
Esporta il database di produzione (dal server Phorum di produzione):
$ mysqldump -u USER_NAME -p DATABASE_NAME \u003e phorum_dump.sql
Copia il dump del database sul server Discourse.
Usa
scporsyncper copiare il database. E naturalmente, puoi comprimerlo con gzip prima.
Importazione del database di produzione nel server Discourse
Sul server Discourse, crea un database:
$ mysql -u root
Se il tuo utente del database ha una password, dovresti usare:
mysql -u root -pe poi inserire la password.
mysql\u003e CREATE DATABASE phorum;
Assicurati che il database sia stato creato:
mysql\u003e SHOW DATABASES;
Dovresti vedere qualcosa di simile a questo:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| phorum |
| sys |
+--------------------+
5 rows in set (0.04 sec)
Questo è un database vuoto. Il nostro prossimo passo è importare il database di produzione al suo interno.
$ mysql -u root phorum \u003c phorum_dump.sql
Mentre siamo qui, otteniamo il prefisso delle tabelle. Ne avremo bisogno più tardi:
$ mysql -u root
mysql\u003e USE phorum;
mysql\u003e SHOW TABLES;
Vedrai qualcosa di simile a questo:
+---------------------------+
| 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)
Dall’output sopra puoi vedere che il prefisso è pw_.
Esecuzione dello script Phorum Importer
Per prima cosa, installa le dipendenze dell’importer:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" \u003e\u003e Gemfile
$ bundle install
Ora configuriamo lo script in modo che soddisfi le nostre esigenze. Nel nostro esempio, questo basterà:
PHORUM_DB = "phorum"
TABLE_PREFIX = "pw_"
BATCH_SIZE = 1000
# ...
host: "localhost",
username: "root",
password: "", # Cambia questo se hai una password per il database MySQL
database: PHORUM_DB
Se vuoi creare un reindirizzamento URL, dovrai decommentare quanto segue:
# 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
Dovrebbe apparire così:
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
Esegui l’importer con un’istanza pulita di Discourse:
bundle exec rake db:drop db:create db:migrate
bundle exec ruby script/import_scripts/phorum.rb
L’importer si connetterà al server MySQL e migrerà il nostro database Phorum nel database di Discourse.
Avvia il server Discourse dopo che l’importer ha completato l’importazione:
$ bundle exec rails server
Avvia Sidekiq per elaborare i dati migrati:
$ bundle exec sidekiq
Puoi monitorare lo stato di avanzamento di Sidekiq all’indirizzo
http://localhost:3000/sidekiq/queues.
Configura il tuo server di produzione Discourse seguendo questa guida.
Esegui un backup del database di Discourse e caricalo sul tuo server di produzione Discourse seguendo questa guida.
È fatto ![]()