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

Ciao - sembra una guida eccellente, ma siccome sono un utente di Cpanel e non di Linux, e sto migrando da un hosting condiviso, non ho accesso root né accesso SSH all’host originale. Tuttavia, ho accesso a phpMyAdmin in Cpanel, da cui posso esportare il database di MyBB.
Va bene così?
Sono necessarie eventuali impostazioni speciali per l’esportazione? E in quale directory sul mio droplet di Digital Ocean dovrebbe essere copiato questo database? (Sto utilizzando FileZilla)

Sì.

Non importa, la directory home va benissimo.

3 Mi Piace

Ciao di nuovo - riesco ad arrivare fino a questo punto nel tutorial

bundle install

ma per me si interrompe con l’errore

'Non eseguire Bundler come root. Bundler può richiedere sudo se necessario, e
installare il tuo bundle come root romperà questa applicazione per tutti gli utenti
non root su questa macchina.
Il tuo Gemfile non ha fonti di gemme. Se hai bisogno di gemme che non sono già presenti
sulla tua macchina, aggiungi una riga come questa al tuo Gemfile:
source ‘https://rubygems.org
Impossibile trovare la gemma ‘mysql2’ in nessuna delle fonti di gemme elencate nel tuo Gemfile.

Hai qualche suggerimento?

Purtroppo non so nulla di Ruby, Linux o Gemfile, quindi sto letteralmente procedendo passo dopo passo attraverso le varie attività di configurazione di Discourse CLI seguendo le istruzioni dei tutorial, copiando e incollando i comandi tramite PuTTY, senza alcuna comprensione.

Sto eseguendo Ubuntu e Discourse su un Droplet di Digital Ocean, se questo può aiutare?

Inoltre, vedo un successivo riferimento all’inserimento dei comandi di esportazione del database in ‘shell’. A fini pratici, la mia attuale connessione PuTTY al server equivale a ‘shell’, o è coinvolta qualche altra interfaccia/console?

OK, in parziale risposta alla mia stessa domanda, un po’ di navigazione casuale sui forum suggerisce che

$ sudo apt-get install libmysqlclient-dev

consentirà poi l’installazione del gem mysql2 (qualunque cosa sia), ignorando l’avviso di non eseguire questa operazione come root.

Superato questo ostacolo e passando al passaggio successivo, digitando

$ bundle exec rails db:drop

ottengo un altro errore::::

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: impossibile trovare l’eseguibile rails per il gem railties. railties non è attualmente incluso nel bundle, forse intendevi aggiungerlo al tuo Gemfile?

Controllando in /usr/local/bin/, vedo che c’è sicuramente un file chiamato ‘rails’.

Digitare sudo gem o gem install rails o $ sudo gem install rails non aiuta (secondo i vari suggerimenti trovati per questo errore).

Ho anche reinstallato Ruby on Rails da zero per assicurarmi che tutte le dipendenze normali fossero presenti https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-18-04 - senza alcun miglioramento, sia che io usi la versione 2.51 che la 2.61.

Sono proprio fuori dalla mia profondità qui…

Bene, posso affermare con certezza che seguire questa guida esattamente come scritta NON funziona per nessuno che segua i passaggi ufficiali per configurare l’ambiente di sviluppo locale su un’installazione di Ubuntu 18.04 tramite WSL2 sotto Windows 10: quasi ad ogni passaggio si verificherà un errore di dipendenza mancante, un errore di connessione rifiutata o qualcosa di simile.

Con molta fatica e ricerche online, sono riuscito ad arrivare al comando:

$ bundle exec ruby script/import_scripts/mybb.rb

ma questo genera la seguente risposta:

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

Questo è stato un muro invalicabile: nulla di ciò che ho trovato cercando online sembra offrire una soluzione funzionante a questo problema.

Come posso risolvere e procedere al passaggio successivo? Qualsiasi aiuto sarà molto apprezzato!

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.