Migra un forum FluxBB a Discourse

Ho creato uno script di migrazione per importare un database FluxBB in Discourse. Ora spiegherò come eseguire il processo di importazione in un tutorial passo dopo passo.

Ho testato questo script di migrazione con FluxBB v1.5.10 (che è la versione attuale).

Quali dati possono essere importati?

  • Utenti (inclusi bio e firme)
  • Gruppi
  • Categorie
    :warning: Le autorizzazioni non verranno importate e tutte le categorie saranno pubbliche. Le autorizzazioni corrette devono essere impostate manualmente dopo l’importazione.
  • Argomenti (incluso lo stato fissato/attaccato)
  • Messaggi
  • Utenti sospesi

Prima di iniziare la migrazione, configura un ambiente di sviluppo sulla tua macchina (o all’interno di una macchina virtuale). Consulta le guide di installazione per lo sviluppo su OS X o Ubuntu.

Discourse richiede Ruby 3.4+. Per verificare la versione di Ruby installata, esegui il comando seguente:

ruby -v

MySQL

Ora abbiamo bisogno del gem mysql2 per Ruby per connetterci al nostro vecchio database FluxBB. Esegui i comandi seguenti per installare la dipendenza libmysqlclient-dev e il gem mysql2.

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

(opzionale) Importazione di un dump MySQL su localhost

Per installare il client MySQL e importare un file di dump MySQL (.sql) nella tua macchina di sviluppo, segui le istruzioni sottostanti:

sudo apt-get install mysql-server mysql-client

Crea l’utente MySQL, le autorizzazioni e il database:

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

Importa il file di dump del tuo database FluxBB:

mysql -u fluxbb -p fluxbb < myfluxbb.sql

Da BBCode a Markdown

Lo script di importazione gestisce automaticamente la conversione da BBCode a Markdown. Non sono necessari gem aggiuntivi per questo.


Dopo aver installato mysql2, vai al percorso di installazione di Discourse e apri il file Gemfile per modificarlo.

cd ~/discourse
sudo nano Gemfile

Ora inserisci la riga seguente alla fine del file per aggiungere il gem mysql2 a Discourse.

gem 'mysql2'

Prima di eseguire lo script di importazione, incolla queste righe una alla volta nel tuo terminale (usa i tasti freccia per modificare i valori).

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

Ora è il momento di eseguire lo script di importazione. Esegui il comando seguente per avviare la migrazione.

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

Attendi fino al completamento dell’importazione. Puoi riavviarlo se si blocca o diventa estremamente lento.

Al termine, complimenti! Il tuo database è stato migrato con successo da FluxBB a Discourse :thumbsup:

Avvia la tua istanza di Discourse:

bundle exec rails server

Avvia Sidekiq e lascia che faccia il suo lavoro:

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

A seconda delle dimensioni del tuo forum, questa operazione potrebbe richiedere molto tempo. Puoi monitorare l’avanzamento all’indirizzo http://localhost:3000/sidekiq.

Ora crea un backup dalla pagina di amministrazione /admin/backups e importalo nel tuo sito Discourse attivo.

12 Mi Piace
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
Caricamento gruppi esistenti...
Caricamento utenti esistenti...
Caricamento categorie esistenti...
Caricamento post esistenti...
Caricamento argomenti esistenti...

creazione gruppi
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': La tabella 'flux.groups' non esiste (Mysql2::Error)

Sembra che le tabelle non esistano nel database MySQL. Ti consiglio di accedere prima al DB MySQL e verificare quali tabelle sono presenti. Potrebbe essere necessario modificare lo script per farlo funzionare.

2 Mi Piace

Ecco, passo dopo passo.

Questo importatore è rotto nelle versioni moderne di Discourse?

Sto eseguendo un’istanza di Discourse installata utilizzando discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (aka “Le uniche installazioni ufficialmente supportate di Discourse”).

Ho configurato un DB MariaDB all’interno del container Docker, vi ho importato il mio dump del forum, ecc. perché qualsiasi altro approccio è molto difficile da configurare. Tutto ciò che ho fatto è stato all’interno della shell cd /var/discourse/ && ./launcher enter app.

L’esecuzione di bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md fallisce con:

/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)

L’esecuzione di sudo -u postgres psql discourse nella stessa shell mi collega correttamente al database “discourse”.

Mi scuso per l’assunzione negativa, era semplice:

Lo script deve essere eseguito con l’utente discourse, non come root nel container, cosa che ho fatto.

A parte alcuni codici BB non convertiti, sembra che abbia funzionato bene. Grazie!

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 sembra essere una bella PR con correzioni alla conversione del codice BB.

Avviso importante:

Le autorizzazioni vengono ignorate da questo importatore.

Tutti i tuoi forum verranno pubblicati come pubblici.

Se avevi forum impostati per essere leggibili solo dai moderatori, dopo aver utilizzato questo importatore saranno leggibili da chiunque.

1 Mi Piace

Puoi modificare i permessi delle categorie manualmente dopo l’importazione. Probabilmente non sarà un lavoro troppo grande sistemarli manualmente.

Aggiungere il supporto per l’importazione dei permessi è probabilmente un lavoro più grande che farlo manualmente.

1 Mi Piace

Grazie per la segnalazione, ho aggiunto un avviso in merito nella guida.

2 Mi Piace