Migrazione di un forum myBB a Discourse usando Kubuntu in una VM

Dopo aver passato troppe ore ho pensato di essere vicino ma poi…

$ bundle exec ruby script/import_scripts/mybb.rb 
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating users
script/import_scripts/mybb.rb:96:in `block (3 levels) in import_users': undefined method `exists?' for File:Class (NoMethodError)

                  @uploader.create_avatar(newuser, filename) if File.exists?(filename)
                                                                    ^^^^^^^
Did you mean?  exist?

ancora niente da fare :frowning:

1 Mi Piace

Se ho capito bene, il metodo è stato deprecato e poi rimosso dalle versioni attuali di Ruby:

Lo script di importazione dovrebbe essere aggiornato per riflettere questa modifica.


Forse prova a sostituire exists con exist senza la “s” qui:

:slight_smile:

Documentazione Ruby: https://ruby-doc.org/3.2.2/File.html#method-c-exist-3F

1 Mi Piace

Sì, è stato deprecato da secoli prima di allora. Cercherò di trovare le occorrenze pertinenti e di cambiarle, ma devo fare una pausa da questo esercizio lungo e finora non molto gratificante :wink:

Beh…

$ bundle exec ruby script/import_scripts/mybb.rb
Caricamento gruppi esistenti...
Caricamento utenti esistenti...
Caricamento categorie esistenti...
Caricamento post esistenti...
Caricamento argomenti esistenti...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': Nessuna impostazione chiamata 'email_domains_blacklist' esiste (Discourse::InvalidParameters)

Puoi trovare il nuovo nome nelle impostazioni del sito. Penso che sia email_domains_blocklist

Grazie.

$ grep -R email_domains_blocklist ./\n```
non restituisce nulla

$ grep -R email_domains_blacklist ./\n./script/import_scripts/base.rb: email_domains_blacklist: ‘’,\n./app/models/site_setting.rb: email_domains_blacklist: "blocked_email_domains",\n```
restituisce quanto sopra. Il che significa che è molto probabilmente blocked_email_domains. D’altra parte, ho notato che nei tentativi precedenti ho sostituito l’originale script/import_scripts/base.rb con quello basato sul gist collegato sopra da @Paul_King:

Ho ripristinato l’originale e sembra che questa volta sia andato a buon fine. Troppo bello per essere vero. Ho/Ha perso qualcosa :wink: Lo scoprirò ora

2 Mi Piace

Riassumendo il percorso (molto più lungo di questo post) :wink: :

NOTA: Ho utilizzato una distribuzione Kubuntu in esecuzione in una macchina virtuale per il processo, quindi tieni presente che potrebbe non essere la stessa su sistemi operativi o distribuzioni diverse.

0. Installazione dell’ambiente di sviluppo Discourse

Seguendo questo post ed eseguendo questo script collegato nel post utilizzando

`bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)`

come descritto lì, più il clonaggio delle sorgenti

git clone https://github.com/discourse/discourse.git ~/discourse

1. Preparazione del database MySQL

Ottieni un dump del database mybb originale come descritto in cima alla discussione:

$ mysqldump -u NOME_UTENTE -p NOME_DATABASE > mybb_dump.sql

e copialo/spostalo nel nuovo ambiente di sviluppo impostato.

Installa il server MySQL

$ sudo apt-get install mysql-server

L’autenticazione per mysql è cambiata nelle versioni più recenti. Devi essere root sull’host se vuoi essere root su mysql in questi giorni, quindi

$ sudo mysql

invece di

$mysql -u root

Naturalmente devi prima essere un “sudoer” (amministratore)

$ sudo mysql
mysql> CREATE DATABASE mybb;
mysql> SHOW DATABASES;
mysql> CREATE USER 'nonrootuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON mybb.* TO 'nonrootuser'@'localhost';
mysql> quit
$ mysql -unonrootuser -ppassword mybb < mybb_dump.sql

<qui ricevi un avviso sul fatto che fornire la password sulla riga di comando non è una cosa intelligente da fare>

$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;

<qui verifica se tutte le tabelle sono presenti - vedi il post originale>

mysql> quit

2. Installazione delle gem Ruby

Controllando il Gemfile nelle sorgenti correnti si scopre che

$ echo "gem 'mysql2', require: false" >> Gemfile

non è realmente necessario. È sufficiente impostare la variabile d’ambiente IMPORT su 1.
Ciò che è necessario, tuttavia, sono i file di sviluppo per i client MySQL, che è ciò a cui si riferisce la prima riga seguente

$ sudo apt-get install libmysqlclient-dev
$ cd ~/discourse
$ IMPORT=1 bundle install

2. Preparazione del database Discourse (PostgreSQL)

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ export DB_PW="password"
$ export DB_USER="nonrootuser"

3. Esecuzione dell’importazione effettiva

La riga successiva corregge una chiamata a metodo a lungo deprecata e attualmente già rimossa nello script di importazione mybb.rb, che è ancora presente al momento della scrittura e non cambierà nulla se questo è già stato corretto

$ sed -i.original 's/File.exists?/File.exist?/' script/import_scripts/mybb.rb

Ora controlla se Redis è ancora in esecuzione. Lo script di installazione Rails lo avvia ma non lo abilita come servizio permanente, quindi non sopravvive a riavvii, crash, ecc.

$ ps -aux |grep redis
silverdr    2808  0.3  0.3  89972 14512 ?        Ssl  05:25   2:04 redis-server *:6379
[…]

Se non vedi nulla di simile alla riga sopra, esegui

$ redis-server --daemonize yes

che è esattamente lo stesso comando che lo script di installazione Rails ha utilizzato la prima volta durante l’installazione.

Infine :pray: e

$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb

Se a questo punto lo script non si è fermato con YAE (Yet Another Error), allora è il momento di stappare quella bottiglia :champagne:

Rimangono alcune cose

  • OK - quindi l’unica parte mancante ovvia sono le password degli utenti. Apparentemente, anche se entrambe le applicazioni memorizzano hash e salt, a giudicare dalla lunghezza di quegli hash, “mybb” utilizza un algoritmo di hashing più vecchio. Pertanto, questo è comprensibile e non un blocco. Tutti dovrebbero essere in grado di reimpostare la propria password la prima volta.
  • Alcune cose di bbcode non vengono convertite. Ho, ad esempio, problemi con i blocchi di codice, che hanno alcuni tag intorno che impostano il font monospaziato Courier e altro ancora. Non ho più la forza di provare ad automatizzare ulteriormente questa cosa. Se riesci a fare qualcosa al riguardo, faccelo sapere qui! :man_bowing:
2 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.