Migrare un forum SMF2 a Discourse

Scusa per la risposta di nuovo. Sto cercando di capire perché i permalink non vengono creati. :frowning:

Per ricapitolare:
Sto utilizzando gli URL “brutti” predefiniti in SMF2 sul dominio radice principale. Discourse è installato su un sottodominio di quel dominio radice. Ho utilizzato l’importatore smf2.rb nell’ultima versione del repository di Discourse per convertire SMF2 in Discourse (seguendo la tua guida), ma dopo il completamento dell’importazione non ci sono permalink in Discourse.

Sono necessari passaggi aggiuntivi, come determinate impostazioni o plugin in esecuzione su SMF2 o Discourse?

Sembra che quella funzione sia per gli URL leggibili? Quindi dovresti modificarla di conseguenza (a meno che non abbia perso qualcosa nel codice).

1 Mi Piace

Sono un po’ confuso perché Marco non ha utilizzato URL leggibili, ma gli sono stati creati permalink e ha usato lo stesso script di importazione.

Questa è la funzione per gli URL leggibili nello script di importazione: discourse/script/import_scripts/smf2.rb at main · discourse/discourse · GitHub

Spero di ricevere aiuto per far funzionare questo per gli URL “brutti” predefiniti di SMF… qualsiasi indicazione sarebbe molto apprezzata. :pray: Grazie a tutti.

Non lo so. Ma la mia migliore risposta gratuita è che penso che tu voglia guardare la riga 222 che dice:

           Permalink.find_or_create_by(url: "forums/index.php/board,#{c["id_board"]}.0.html", category_id: category.id)

Dovresti cambiare quel permalink (o forse gli altri pochi?) in qualcosa che assomigli a quelli brutti? Anche se, a me sembrano già piuttosto brutti. Potresti anche regolare le permalink_normalizations all’inizio del file.

Scusa Jay per risponderti di nuovo, ma la riga 222 dove? La riga 222 di smf2.rb contiene solo:

if parent

Beh, allora stiamo guardando versioni diverse. Non sono sicuro del perché possa essere. Ma la cosa da cercare sono quelle righe relative ai Permalink.

Sono confuso perché la versione a cui ho linkato sembra essere l’ultima versione “ufficiale”… ma sei la seconda persona che fa riferimento a una versione diversa. Cosa mi sto perdendo? Dove posso trovare la tua versione?

Ah, ecco! Scusa. Sembra che abbia cliccato sullo script smf1. Quindi guarda smf1.rb1, che si trova proprio accanto allo script smf2.rb che stai esaminando.

Puoi either guardare lo script smf1 o usare make_prettyurl_permalinks come modello per creare un make_uglyurl_permalinks. Tuttavia, questo legge dalla tabella degli URL eleganti, quindi potrebbe essere più semplice usare smf1.rb come modello, ma dovrei controllare il database per esserne sicuro. No. Questo non aiuterebbe molto a meno che non modifichi le funzioni create_xxx.

Scusa. Non vedo una soluzione che possa essere spiegata qui.

1 Mi Piace

Sono arrivato fino a qui, ma non riesco a superare questo punto. Ho persino creato un nuovo utente sul server MySQL con una password nativa e ho provato, ma senza successo.

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
Caricamento dei gruppi esistenti...
Caricamento degli utenti esistenti...
Caricamento delle categorie esistenti...
Caricamento dei post esistenti...
Caricamento degli argomenti esistenti...
Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:701: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.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': Crittografia RSA non supportata - il plugin caching_sha2_password è stato compilato con il supporto GnuTLS (Mysql2::Error)

OK, dopo MOLTE ore di tentativi per far funzionare questa cosa, ho individuato il problema e lo pubblico qui per chiunque altro possa rimanere bloccato come me.

Il contenitore Docker di MySQL è alla versione 8; per qualche motivo, la libreria MariaDB inclusa nel modello di MySQL non funziona.

Non ho incluso il file del modello MySQL nella configurazione del contenitore Docker di importazione: questa è stata la prima modifica.

Ho compilato il contenitore di importazione e vi sono entrato con ./launcher enter import

Poi:

echo "gem 'mysql2'" >> Gemfile
wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
dpkg -i mysql-apt-config_0.8.17-1_all.deb

Questa procedura presenta un prompt interattivo e puoi selezionare le impostazioni predefinite (MySQL 8 con gli strumenti).

Poi ho installato la normale libreria MySQL 8 e ho proseguito con la compilazione:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'bundle config unset deployment'
su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'

Una volta completato tutto il resto è rimasto invariato: l’importazione ora è in esecuzione.

Gli sviluppatori di Discourse potrebbero voler modificare gli script di importazione per tenere conto di questo problema; almeno ora è sui forum, così altri potranno vederlo se si trovano bloccati come me.

3 Mi Piace
  1. Distruggere seguendo queste istruzioni? how-to-migrate-import-from-smf2-to-discourse/90129#cleanup-5

  2. Ho trasferito manualmente la directory degli allegati da SMF2 a Discourse prima di importare, quindi ho eseguito l’importatore una volta, ma i caricamenti non appaiono nei post su Discourse. Qualche idea sul perché?

  3. Ho già eseguito l’importatore una volta senza S3 abilitato, ma vorrei usare S3. Cosa devo fare?

  1. Hmm… Proverei ad abilitare S3 e a reimportare.
  2. Abilita S3 prima di avviare l’importazione.
1 Mi Piace

Ho già eseguito l’importatore una volta senza S3. Durante un’importazione delta, gli allegati dai topic già importati verrebbero trasferiti su S3?

È meglio ricominciare da capo e abilitare S3 prima di eseguire l’importazione.

Ricevo questo errore durante la creazione degli utenti:

oxipng worker: oxipngnon trovato; fornisci il binario corretto o disabilita questo worker (argomento --no-oxipng o:oxipng => false tramite le opzioni)

Dopo di ciò, inizia a creare i post.

  • Potrebbe essere questo il motivo per cui gli allegati non appaiono in Discourse?
  • Dove dovrebbe essere installato oxipng?

Aggiornamento: sono confuso sul perché ricevo questo errore relativo a oxipng. Non riesco a trovare nulla a riguardo in Discourse e sto riscontrando questo problema solo durante l’esecuzione dello script di importazione smf2. Potrebbe essere correlato a questo? https://meta.discourse.org/t/faster-and-smaller-uploads-in-discourse-with-rust-webassembly-and-mozjpeg-blog

Si tratta solo di un avviso proveniente dalla libreria di ottimizzazione delle immagini che utilizziamo lato server; non dovrebbe bloccare nulla.

2 Mi Piace

Quindi pensavo che i problemi di importazione fossero forse legati a S3, ma sembra che S3 funzioni perfettamente. Il problema che riscontro è che, dopo aver eseguito lo script di importazione (con S3 abilitato) e aver ricostruito il contenitore di importazione, sembra che tutti i topic in Discourse manchino dei file caricati che sono allegati nei topic smf2. In altre parole, non c’è alcun segnale visivo che indichi la presenza di un caricamento in un topic di Discourse, mentre è chiaramente visibile come allegato nel suo equivalente topic smf2. Lo stesso risultato si ottiene quando importo con S3 disabilitato. Mi sto un po’ arrovellando senza idee. :confused: Avete qualche suggerimento?

Potrebbe essere che le immagini siano allegate al post, quindi lo script di importazione sa di doverle importare, ma che non siano referenziate nel post in modo che non appaiano. Devi modificare il testo del post per includere un collegamento alle immagini. Ho visto qualcosa del genere, credo con un forum diverso.

Vuoi dire modificare il post su smf2 per includere i link ai file allegati prima di importarli su Discourse?

Bene, potrebbe essere una soluzione.

Ma intendo modificare lo script di importazione per aggiungere l’allegato al post grezzo. Qualcosa come