Migrare un forum SMF2 a Discourse

Forse è meglio aprire un ticket con Duffield Ocean riguardo ai caratteri errati?

Potresti usare un client SSH come PuTTY o la nuova shell che, credo, faccia parte del sottosistema Linux per Windows (l’ultima versione di Windows che ho usato aveva un anno come identificatore di versione, quindi non posso esserti d’aiuto). Se usi un Mac, apri semplicemente un terminale e usa ssh.

Se il tuo database è grande, ci vorrà del tempo per caricarlo e non vedrai alcun output, a parte un nuovo prompt al termine. Secondo me, stava funzionando correttamente.

2 Mi Piace

Grazie @pfaffman. Penso che mi rivolgerò a loro a riguardo.

Posso provare un client SSH diverso e vedere se funziona meglio.

Il database non è così grande. È fermo da un’ora e si trova ancora nello stesso punto. Ho controllato la CPU del server ed è praticamente inattiva.

1 Mi Piace

Sì, era quello il problema! Grazie ancora @pfaffman. Si torna a fare progressi…

Un’altra soluzione è consentire l’accesso diretto al database dal droplet che esegue l’importazione, eliminando così la necessità di un database locale.

Se è passata un’ora, è probabile che l’operazione non stia avvenendo. Potresti provare qualcosa del genere:

 cat database.sql | mysql
1 Mi Piace

Un passo avanti, un passo indietro.

Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "LETSENCRYPT_ACCOUNT_EMAIL ENV variable is required and has not been set."; exit 1; fi failed with return #<Process::Status: pid 1187 exit 1>

Non avevo Let’s Encrypt installato, quindi l’ho installato.

Ciò che manca nella sezione “Preparazione dell’host e del container Discourse per l’importazione” è che devi rimuovere il commento dalla riga dell’ambiente per LETSENCRYPT_ACCOUNT_EMAIL e inserire il tuo indirizzo email. Questo mi ha permesso di superare questo errore.

In un aggiornamento, ora sono alla fase finale di importazione. Entro nel contenitore di importazione ed eseguo lo script di importazione. Esce immediatamente con:

Traceback (most recent call last):
        1: from script/import_scripts/smf2.rb:4:in `<main>'
script/import_scripts/smf2.rb:4:in `require': cannot load such file -- mysql2 (LoadError)

Ho fatto molte ricerche sul web, ma finora senza risultati.

EDIT: Penso che questo possa essere dovuto al fatto che mysql non è installato nel contenitore. Ho provato ‘gem install mysql2’, ma mi restituisce:

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.

EDIT 2:
Quindi sono riuscito a installare mysql2. Prima ho dovuto installare gli strumenti di sviluppo, ma la fonte suggerita non era disponibile. Quindi ho eseguito:

sudo apt-get install default-libmysqlclient-dev

Da lì sono riuscito a eseguire:

gem install mysql2

Ho ancora ricevuto lo stesso errore. Quindi ho provato a commentare quel require nello script solo per vedere cosa sarebbe successo. Ho ottenuto un nuovo errore:

Traceback (most recent call last):
        6: from script/import_scripts/smf2.rb:627:in `<main>'
        5: from script/import_scripts/smf2.rb:19:in `run'
        4: from script/import_scripts/smf2.rb:447:in `parse!'
        3: from script/import_scripts/smf2.rb:502:in `parser'
        2: from script/import_scripts/smf2.rb:502:in `new'
        1: from /usr/local/lib/ruby/2.6.0/optparse.rb:1089:in `initialize'
script/import_scripts/smf2.rb:504:in `block in parser': can't modify frozen String (FrozenError)

La ricerca su questo errore restituisce un vecchio bug di Ruby, ma è stato corretto molto tempo fa, quindi sono di nuovo bloccato.

Vai su smf2.rb e cambia la stringa Frozen da true a false o viceversa; si trova sulla prima o sulla seconda riga. Funzionerà dopo questo intervento.

2 Mi Piace

Grazie @Paracelsus! L’ho risolto. Ho cambiato il valore da true a false.

Un passo più vicino!

MODIFICA:
Avevo un errore strano che sembrava puntare all’indirizzo IP sbagliato. Il problema era che avevo inserito la password errata in Settings.php. Ora è corretto.

Ora sto cercando di capire:

Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:627:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (Mysql2::Error::ConnectionError)

Suppongo che questa riga nel file di configurazione dello script serva proprio a risolvere il problema:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

Dovrebbe essere aggiunta da qualche parte all’interno del container di importazione?

Ok, ho risolto il problema precedente. Si tratta di un problema con l’ultima versione di MySQL, che non supporta più le vecchie password native. Il modo più semplice per risolvere è eseguire questo processo utilizzando MySQL 5.7. Basta modificare il passaggio 3 da:

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql

a

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql:5.7

e dovresti essere a posto. La mia importazione sta finalmente funzionando.

2 Mi Piace

Una nuova domanda: non riesco a importare le immagini dei profili degli utenti. È normale che sia così?

Ho salvato quelle che devono essere ridimensionate in una cartella personalizzata invece che in quella standard di SMF; potrebbe essere questa la causa?

Altrimenti, finora tutto bene. Questa guida è ottima e anche le importazioni incrementali del database funzionano benissimo :+1:.

2 Mi Piace

Il nostro è arrivato senza passaggi aggiuntivi. Non sono sicuro di dove SMF memorizzi gli avatar al momento. Hai trasferito anche gli allegati? Ho importato solo il nostro database SQL e gli allegati, quindi suppongo che siano lì.

Sì, erano lì, ma avevo spostato gli avatar in un’altra cartella e ho dimenticato di copiarli nella cartella degli avatar che l’importazione utilizza per abbinarli all’utente. Problema risolto (anche se ho dovuto rifare l’importazione).

Ora c’è un nuovo problema… gli utenti bannati non appaiono come sospesi quando vengono importati, ma solo come disattivati. Avete idee su come farli apparire come sospesi invece?

1 Mi Piace

Sto utilizzando l’ultima versione v2.50 beta2 di SMF v2.0.17 e viene generato un file smf2.rb diverso a causa dell’attuale:

templates/import/mysql-dep.template.yml

Come spiegato nel Passaggio 4, sostituendo “quote =”, l’iterazione corrente è:

quote = +“\n[quote="#{params[‘author’]}”

Inoltre, non è più presente:

Tuttavia, ho proceduto con l’importazione, ma purtroppo si è interrotta con il messaggio “IGNORE_BBCODE intendi IgnoreUser”.
Mi dispiace, avrei dovuto fare uno screenshot del Traceback, ma non l’ho fatto; comunque, questo è il mio ricordo.
Avete qualche idea?
Grazie.

Ho recentemente aggiornato questo script. Darò un’occhiata.

1 Mi Piace

Grazie mille! Una domanda: se ricomincio da capo, sovrascriverò ciò che ho già importato? Cioè, utenti e categorie.
Saluti!
G.

Generalmente no. Gli script di importazione sono abbastanza intelligenti da riprendere esattamente da dove li avevi lasciati!

1 Mi Piace

@tradenet dovrebbe essere risolto ora qui:

Scusa per il disagio!

Sarà disponibile in tests-passed non appena tutti i controlli saranno completati.

3 Mi Piace

Grazie per la sua gentile attenzione.
G.

2 Mi Piace

Gli URL vecchi di SMF rimarranno non funzionanti dopo la conversione a Discourse?

Non proprio. L’importatore creerà permalink che corrispondono (e reindirizzano) i vecchi URL ai nuovi percorsi.