Migrare un forum MyBB a Discourse

In questo tutorial, impareremo come migrare un forum MyBB alla piattaforma :discourse: utilizzando lo script ufficiale MyBB Importer.

Cosa può essere migrato

  • Categorie
    • Categoria radice => categoria radice
    • Sottocategoria => sottocategoria
    • Forum radice => sottocategoria
    • Sottoforum => sottocategoria
  • Thread e risposte => topic e post
  • Utenti
    • Nome utente
    • Email
    • Stato privilegi
    • Stato registrazione
  • Redirezionamenti

Il nostro piano è molto semplice:

  • Configurare l’ambiente di sviluppo (DEV) locale.
  • Esportare il database di produzione.
  • Importare il database di produzione in Discourse.
  • Eseguire lo script MyBB importer.

Cominciamo :slightly_smiling_face:

Configurazione dell’ambiente DEV locale

Per prima cosa, devi seguire una di queste guide per installare la piattaforma Discourse stessa. Consulta questa guida se incontri problemi.

Installa il server di database MySQL;

MacOS:

$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

Controlla lo stato del servizio:

$ brew services list

Dovresti vedere qualcosa del genere:

mysql@5.7         started

Altrimenti, esegui il comando seguente e riprova:

$ brew services start mysql@5.7

Ubuntu 18.04:

$ sudo apt update
$ sudo apt install mysql-server -y

Dopo aver completato l’installazione di MySQL, controlla il suo stato:

$ systemctl status mysql.service

Se non è in esecuzione, esegui il comando seguente:

$ sudo systemctl start mysql

Per Windows, puoi seguire la guida ufficiale all’installazione.

Chiameremo questo ambiente: server Discourse.

Esportazione del database di produzione

Esporta/Esegui il backup del database di produzione (dal server MyBB di produzione) eseguendo:

$ mysqldump -u NOME_UTENTE -p NOME_DATABASE > mybb_dump.sql
  • Copia questo dump del database sul server Discourse.

:bulb: Puoi utilizzare scp o rsync per copiare il database.

Importazione del database di produzione in Discourse

Sul server Discourse, crea un database:

$ mysql -u root

:bulb: Se il tuo utente DB ha una password, dovresti usare: mysql -u root -p e poi inserire la tua password.

mysql> CREATE DATABASE mybb;

Assicurati che il database sia stato creato con successo eseguendo:

mysql> SHOW DATABASES;

Dovresti vedere qualcosa del genere:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mybb               |
| sys                |
+--------------------+

Il DB mybb è vuoto al momento. Il nostro prossimo passo è importare il database di produzione al suo interno.

$ mysql -u root mybb < mybb_dump.sql

In seguito, avremo bisogno del prefisso delle tabelle. Quindi, mentre siamo qui, otteniamolo.

$ mysql -u root
mysql> USE mybb;
mysql> SHOW TABLES;

Vedrai qualcosa del genere:

+--------------------------+
| Tables_in_mybb           |
+--------------------------+
| mybb_adminlog            |
| mybb_adminoptions        |
| mybb_adminsessions       |
| mybb_adminviews          |
| mybb_announcements       |
| mybb_attachments         |
| mybb_attachtypes         |
| ...Il resto delle tabelle...|
+--------------------------+

Il nostro prefisso delle tabelle è mybb_ come mostra l’output.

Esecuzione dello script MyBB Importer

  • Installiamo prima le dipendenze dell’importer. Dal server Discourse:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

Successivamente, dovresti configurare lo script per eseguirlo correttamente. Copia e incolla il seguente codice nel tuo terminale (modifica i valori se necessario):

export DB_HOST="localhost"
export DB_NAME="mybb"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="mybb_"

Hai un’altra opzione per configurare lo script. Apri script/import_scripts/mybb.rb in qualsiasi editor a tua scelta e modifica i valori all’interno delle virgolette doppie in modo che corrispondano alle tue esigenze:

  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME'] || "mybb"
  DB_PW ||= ENV['DB_PW'] || ""
  DB_USER ||= ENV['DB_USER'] || "root"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "mybb_"

Esegui l’importer con un’istanza pulita di Discourse:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/mybb.rb

L’importer si connetterà al server MySQL e migrerà il tuo database MyBB nel database Discourse.

Dopo che l’importer ha terminato, avvia l’istanza di Discourse eseguendo:

$ bundle exec rails server

Successivamente, avvia Sidekiq (elaboratore di job in background) per elaborare i dati migrati:

$ bundle exec sidekiq

:bulb: Puoi monitorare l’avanzamento di Sidekiq su http://localhost:3000/sidekiq/queues.

Configura il tuo server di produzione Discourse seguendo questo tutorial.

Esegui un backup della piattaforma Discourse (server Discourse locale) e caricalo sul tuo server di produzione Discourse seguendo questo tutorial.

:tada:

Se hai domande sul processo, sono felice di aiutarti.

Buona migrazione :grinning:

9 Mi Piace

Hi - this looks like a great guide, except as a Cpanel rather than linux user, migrating from a shared host, I don’t have root access or ssh access to the original host, but I do have access to PhPMyAdmin in Cpanel from which I can export the Mybb database.
Will this do?
What if any special export settings are required? And into what directory on my Digital Ocean droplet should this database be copied? (I am using FileZilla)

Yes.

It does not matter, home directory works just fine.

3 Mi Piace

Hi again - I can get up to this point in the tutorial

bundle install

and for me this falls over with error

'Don’t run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
Your Gemfile has no gem server sources. If you need gems that are not already on
your machine, add a line like this to your Gemfile:
source ‘https://rubygems.org
Could not find gem ‘mysql2’ in any of the gem sources listed in your Gemfile.

Any suggestions?

Unfortunately I know nothing about ruby or linux or gemfiles and so am just literally plodding though various discourse cli setup tasks as the tutorials instruct by cutting and pasting commands via PuTTy, without any kind of understanding.

I am running Ubuntu and Discourse in a Digital Oceans Droplet, if that helps?

Also, I see a subsequent reference to pasting database export commands into ‘shell’ . For practical purposes is my current PuTTy connection to the server = ‘shell’, or is some other interface/console involved?

OK, in partial answer to my own question, random thrashing around on forums suggests

$ sudo apt-get install libmysqlclient-dev

will then allow mysql2 gem to install (whatever that is) - ignoring the warning about not doing this as root.

Getting past that and to the next step - typing

$ bundle exec rails db:drop

gives another error::::

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile?

Checking in /usr/local/bin/ and I can see a file named ‘rails’ is definitely there.

Typing $ sudo gem or $ gem install rails or $ sudo gem install rails does not help (per various suggestions stumbled across for this error).

Have even gone back and installed Ruby on Rails from scratch to try and ensure all normal dependencies are present How To Install Ruby on Rails with rbenv on Ubuntu 18.04 | DigitalOcean -and no improvement - whether I use version 2.51 or 2.61.

Well out of my depth here…

Well I can say categorically that following this guide as written does NOT work for anyone following the official steps for setting up local Dev environment under WSL2 installation of Ubuntu-18.04 under Windows 10 - at almost every step there will be some dependency missing or connection refused error or similar.

With a lot of pain and online research, I have managed to get up to the command:

$ bundle exec ruby script/import_scripts/mybb.rb

but this generates response:

mysql2/client.rb:90:in `connect’: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

This has been a brick wall - nothing I have found by searching online seems to offers a working solution to this

How do I solve this and progress to the next step? Any help much appreciated!

1 Mi Piace

Ciao, come posso caricare il database sul mio droplet DigitalOcean? Ho usato l’installazione 1-click di DigitalOcean per installare Discourse (Ubuntu).
Sul mio PC ho Windows 10 Home versione build 18362.

Ho poi installato MySQL, ma ora non so come caricare “fisicamente” il database Mybb sul server. Non c’è phpMyAdmin dove si può importare facilmente il database? :frowning:

1 Mi Piace

È necessario caricare il file utilizzando scp o uno strumento simile. Quindi qualcosa come

  mysql -u user -p password database < filename..sql
3 Mi Piace

Sono bloccato :frowning:

1 Mi Piace

Questa guida dovrebbe essere aggiornata per essere compatibile con l’esecuzione dell’importazione all’interno di un’installazione Docker invece di utilizzare un computer di sviluppo locale.

5 Mi Piace

Non vedo l’ora che la guida funzioni in un ambiente basato su Docker :slight_smile:

2 Mi Piace

Alla fine ho rinunciato al fai-da-te e ho ingaggiato uno sviluppatore, rimandandolo a tutti i grandi suggerimenti di questo forum (che sono stati d’aiuto!) - e credo che abbia realizzato tutto direttamente sul mio droplet Digital Ocean in produzione, piuttosto che in un ambiente di sviluppo separato (così da poter revisionare facilmente le cose mentre lavorava - gli utenti non sono stati impattati dato che il forum non era ancora ufficialmente online.) - in altre parole, penso che sia possibile.

Dopo alcune iterazioni, i risultati sono ora piuttosto buoni: tutti i problemi relativi a MyCode e ai caratteri strani sono stati risolti, ho tradotto i prefissi dei post MyBB in tag Discourse, e i campi personalizzati multi-selezione del profilo utente sono stati importati con successo.

Se è disposto, gli chiederò di condividere eventuali modifiche allo script di importazione standard e altre tecniche utilizzate qui.

4 Mi Piace

Nel caso possa essere utile a qualcuno, lo sviluppatore @rahilqf con cui ho collaborato ha completato il progetto, inclusa la traduzione dei campi utente personalizzati di MyBB in campi utente personalizzati di Discourse (che richiede l’installazione del plugin multi-select-user-field), la traduzione dei prefissi dei post di MyBB in tag di Discourse e la rimozione di quasi tutti i tag MyCode ridondanti dal testo dei post di MyBB.

La sua versione personalizzata dello script di importazione è condivisa qui - Script di importazione personalizzato da MyBB a Discourse.

Ha anche unito con successo un archivio Mbox di Yahoo Groups, utilizzando lo script di importazione standard Yahoo, sebbene in questo caso gli allegati non siano stati tradotti. Nel mio caso non si è trattato di un problema significativo.

3 Mi Piace

Sto convertendo utenti, post, argomenti, ecc. dal database di MyBB!

Ho seguito questa guida: Install Discourse on Ubuntu or Debian for Development

ma http://localhost:3000/ o http://forum.omaggieconcorsi.com:3000/ non funzionano

Comunque, il programma sta convertendo qualcosa, ma non so dove poter esportare i dati.
Non riesco a vedere Discourse con http://forum.omaggieconcorsi.com:3000/ o http://localhost:3000/, quindi come posso almeno esportare il database con post, utenti, ecc. dal vecchio forum MyBB e poi importarlo nella nuova istanza di Discourse?

Grazie!

Hai seguito quelle istruzioni sullo stesso computer su cui stai eseguendo il browser web?

1 Mi Piace

Sì, sempre lo stesso computer

Ok, ho seguito questa guida su Ubuntu 18.04 con sistema operativo “reale” installato su PC e localhost:3000 funziona!

Ma ora ho un problema con il database MySQL :frowning: Scusa…

Ho digitato:

debby@debby-MS-7721: mysql -u root
ERROR 1698 (28000): Accesso negato per l'utente 'root'@'localhost'

:frowning:

MODIFICA: Ho aggiunto una password a root con ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

E in DB_PW ho inserito la password dell’utente root.

… e ora sta creando gli utenti!!

Tienimi le dita incrociate, è finalmente il momento giusto dopo settimane di test??

1 Mi Piace

Sto cercando di importare il database da MyBB a Discourse. Come @Paul_King, non riesco a farlo funzionare sul mio server DigitalOcean. Continuo a ricevere errori di ogni tipo mentre seguo questa guida.

Sono bloccato nel tentativo di eseguire il comando

$ bundle exec rails db:drop
bundler: comando non trovato: rails
Installa gli eseguibili gem mancanti con `bundle install`

bundle install dice che è completato

$ bundle install
Il tuo Gemfile elenca la gemma mysql2 (>= 0) più di una volta.
Dovresti probabilmente mantenerne solo una.
Anche se al momento non è un problema, potrebbe causare errori se in futuro cambi la versione di una di esse.
Uso di bundler 1.16.1
Uso di mysql2 0.4.10
Bundle completato! 2 dipendenze del Gemfile, 2 gemme ora installate.
Usa `bundle info [gemname]` per vedere dove è installata una gemma in bundle.

Tentando di installare manualmente rails ottengo questo:

$ gem install rails
Compilazione di estensioni native. Questo potrebbe richiedere del tempo...
ERRORE: Errore durante l'installazione di rails:
        ERRORE: Impossibile compilare l'estensione nativa della gemma.

    directory corrente: /var/lib/gems/2.5.0/gems/racc-1.5.2/ext/racc/cparse
/usr/bin/ruby2.5 -r ./siteconf20210110-8155-1ms05r3.rb extconf.rb
mkmf.rb non riesce a trovare i file di intestazione per ruby in /usr/lib/ruby/include/ruby.h

extconf fallito, codice di uscita 1

I file della gemma rimarranno installati in /var/lib/gems/2.5.0/gems/racc-1.5.2 per l'ispezione.
I risultati sono registrati in /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/racc-1.5.2/gem_make.out

È estremamente frustrante.


Ho lasciato questo post aperto e sono riuscito a installare rails. Poi ho avuto un milione di altri errori e sono riuscito a risolverli. Errori. Su. Ogni. Singolo. Passo.

Mai prima d’ora ho provato un tale odio puro per il software. Perché Ruby è così? È un incubo. Ora sono bloccato con questo errore:

$ bundle exec rails db:drop
Traceback (most recent call last):
        1: from /usr/local/bin/bundle:23:in `<main>'
/usr/local/bin/bundle:23:in `load': impossibile caricare il file -- /usr/share/rubygems-integration/all/gems/bundler-1.16.1/exe/bundle (LoadError)

Qualcuno può aiutarmi?

1 Mi Piace

Non è stato utile, ma ho incontrato gli stessi muri di mattoni, sia quando ho provato a configurare un ambiente di sviluppo locale (per generare un file di backup del database Discourse) sia direttamente sul mio Droplet di Digital Ocean. Alla fine, dopo aver sprecato decine di ore, ho deciso che la vita è troppo breve e ho assunto uno sviluppatore su Fiverr (che ha impiegato settimane per capire come risolvere, ma ci è riuscito).
Sospetto che non ci siano incentivi sufficienti per rendere il processo più semplice.

In bocca al lupo! E spero che, se alla fine riesci a sbloccare la situazione, lascerai una scia di indicazioni qui per permettere ad altri di seguire le tue orme!

1 Mi Piace

Come hai installato Rails? Hai seguito una delle guide per lo sviluppo? (come Guida per principianti per installare Discourse su Ubuntu per lo sviluppo)

Esistono alcuni documenti how-to per eseguire lo script di installazione all’interno del container di produzione (cosa che faccio di solito), quindi potresti usarne uno come guida.