Migrare un forum phpBB3 a Discourse

Immagino non avrei dovuto nascondere questa domanda all’interno dell’altro post.

@gerhard, come vengono gestiti attualmente i diversi BBCode? È successo per errore o è intenzionale?

2 Mi Piace

A quale velocità di importazione (post al minuto) siete riusciti ad arrivare con macchine più potenti? Al momento sto eseguendo l’importazione su un Xeon a 8 core e la macchina sembra quasi inattiva, mentre la velocità non supera significativamente i 1000 post/min.

Il disco è un NVMe SSD veloce, quindi presumo che il collo di bottiglia non sia l’I/O. Avete qualche idea su come migliorare ulteriormente la velocità? Sto cercando di guadagnare qualche percentuale per ridurre il tempo totale di importazione, magari di un’ora o due (attualmente intorno alle 14 ore).

1 Mi Piace

Ciao, ho un piccolo problema… ho importato e convertito circa 100.000 post, ma poi ho scoperto di aver dimenticato di impostare correttamente i link di reindirizzamento (oltre a non aver collegato gli smiley agli emoji in settings.yml…). Esiste un modo per rieseguire l’importazione in modo che i link vengano analizzati correttamente, senza modificare nulla di ciò che ho già configurato?
Se eseguo di nuovo lo script, penserà semplicemente che l’importazione sia già stata completata e non farà nulla, o no?

1 Mi Piace

Da quanto ho visto, purtroppo non è possibile. Farà esattamente ciò che hai detto: ignorerà i post già importati.

1 Mi Piace

C’è un modo per far sì che dimentichi temporaneamente i post importati e li reimporti? (Non in modo permanente, poiché in futuro vorrò aggiungere altri post)

1 Mi Piace

Probabilmente non è intenzionale; la conversione da BBCode a Markdown non è ancora perfetta.

Sembra corretto, a meno che tu non possa trovare una CPU con una velocità single core più elevata.

Hai un backup risalente al periodo prima di avviare l’importazione? Potresti ripristinarlo e ricominciare l’importazione. Altrimenti sei sfortunato e dovrai ricominciare da zero.

1 Mi Piace

Che peccato. Vale anche per le emoticon?

Con “ricominciare da capo” intendi reinstallare Discourse?

1 Mi Piace

Mi dispiace dirlo, ma correggere gli smilies dopo l’importazione sarebbe davvero difficile e soggetto a errori. Non posso aiutarti in questo se vuoi seguire quella strada.

Sì, essenzialmente. Puoi saltare alcune fasi eliminando tutti i dati e ricostruendo il contenitore.

./launcher stop app
rm -rf /var/discourse/shared/
./launcher rebuild app
2 Mi Piace

Grazie! :slight_smile: Vuoi dire che con quei due comandi il forum sarà pronto per l’importazione? Nessun altro passaggio da compiere? (E che dire dei temi, dei premi, dei gruppi e di tutto il resto che è stato configurato? C’è un modo per eseguire il backup di queste impostazioni? Per i temi so come salvarli e importarli, ma per le altre impostazioni…) (troppe parentesi)

Sono semplicemente felice di averlo scoperto ora invece che a metà del trasferimento, quando tutto è fermo, così c’è tempo per sistemare le cose. Ma vorrei dover rifare il meno possibile…

Sì, senza un backup devi rifare quelle cose manualmente.

2 Mi Piace

Se non è chiaro, questo cancella l’intero database e ricominci da zero.

Ci sono diversi modi per salvare e ripristinare le impostazioni, se cerchi.

Ma come suggerito, è meglio eseguire queste operazioni dopo l’importazione oppure effettuarle tutte, creare un backup e utilizzarlo come punto di partenza prima dell’importazione.

3 Mi Piace

Ciao Helmi,

Un amico che sta lavorando a un plugin BB code personalizzato ha scoperto un bug nell’importatore, che causava un rendering errato dei tag colore.

Ecco cosa ha detto:

I tag colore vengono rimossi intenzionalmente dai post. Il bug del convertitore NON è che rimuove solo i tag di chiusura. Il “bug” è che NON rimuove i tag colore per colori con nome.

Prova:
https://github.com/discourse/discourse/blob/master/script/import_scripts/ph pbb3/support/text_processor.rb

    def clean_bbcodes(text)
      # Molti tag bbcode di phpbb hanno un hash allegato. Esempi:
      #   [url=https://google.com:1qh1i7ky]clicca qui[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Qualche testo.[/quote:b0wtlzex]
      text.gsub!(/:(?:\w{8})\]/, ']')

      # rimuovi i tag colore
      text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")
    end

Quell’ultima parte text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "") è una regex che cattura i tag colore con codici hash e cattura i tag di chiusura colore, ma non i tag colore con nomi di colore (come color=verde, ecc.).

Soluzione: Rimuovi la riga.

text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")

In realtà non la vogliamo. Vogliamo mantenere quei dati sui colori, indipendentemente da come decidiamo di visualizzarli. (Beh, per il nostro forum questa è la soluzione. Per Discourse probabilmente modificherai il codice in modo che rimuova tutti i tag colore, non solo quelli con nomi di colore).

2 Mi Piace

Ciao Gerhard, quindi dopo aver seguito le tue istruzioni (prima ho cancellato, poi ho rifatto un sacco di lavoro, ho fatto un backup e poi ho eseguito un’importazione. Solo a metà ho capito di aver fatto qualcosa di sbagliato, quindi ho interrotto l’importazione e ho dovuto ricominciare da capo (poiché aveva già importato dei dati).

Quindi, ho cancellato tutto di nuovo.
Dopo aver ricostruito l’app per poter ripristinare il mio backup e poi eseguire l’importazione, il sito si rifiuta di connettersi.

Quando eseguo Discourse Doctor, dice: Discourse version at [domain] NON TROVATA. Su localhost non trovato. Nessun altro errore.

Cosa devo fare?

Non era necessario ricompilare, ma solo ripristinare il backup.

Penso che tu debba eseguire

./launcher start import

Discourse-doctor non conosce il container di importazione.

Potrebbe essere necessario ricompilare sia l’applicazione che il modulo di importazione, poiché dovrebbero essere della stessa versione.

Ho ricostruito l’import, ho ricostruito l’app eppure il collegamento viene rifiutato. :frowning:

È necessario aggiungere nuovamente il dump del database e i file di phpBB. Probabilmente li hai eliminati durante il ripristino.

2 Mi Piace

Sì, le ho cancellate. Ma non dovrò prima ripristinare i miei dati? Avevo configurato molte cose prima dell’importazione per non doverle rifare quando avrei dovuto ripetere l’importazione. Ora non importerebbe forse in un’istanza Discourse vuota?

E poi ripristinerai il tuo backup, che dovrebbe trovarsi in /var/discourse/shared/backups/default

Eccomi di nuovo, scusate, ma ora ho un altro problema…

Questa volta si tratta di: smilies! Ho inserito ogni smiley nel file settings.yml in questo modo:

happy: [‘:D’,‘:-D’]
woo: ‘:woo:’
ecc.

Ho posizionato le immagini degli smiley nella directory /var/discourse/shared/standalone/import/images/smilies.
Durante l’importazione non ho visto errori relativi a smiley non trovati o simili.

Tuttavia, gli smiley non sono stati mappati agli emoji e nei post sono stati convertiti in immagini.

Cosa ho fatto di sbagliato?

Grazie ancora per il vostro aiuto e le vostre osservazioni!

edit: :exploding_head: Certo… devo mapparli da phpbb3, non da phpbb2…
Penso che questo risolva il problema, ma devo ancora verificare se era questo il problema.

edit2: Ho eseguito una nuova importazione con un nuovo dump del database phpbb3 che conteneva gli smiley inseriti. Ancora niente smiley. Sono stati convertiti in immagini e non sono presenti nel set di emoji. Qual potrebbe essere il problema?

Sono finalmente riuscito a mappare gli smilies agli emoji.
Dato che per me è stato un vero e proprio ostacolo, avendo oltre 150 smilies personalizzati con nomi di file e codici diversi, ecco una breve guida estesa per altri nella mia situazione.

Capire cosa fa l’importatore con gli smilies
Cosa credevo sarebbe successo: quando aggiungi i codici degli smilies nell’importatore e inserisci le immagini nel file immagine designato, queste vengono aggiunte automaticamente anche nella cartella degli emoji. Invece non è così. Dovrai quindi importare manualmente le immagini degli smilies negli emoji.
Quando le importi, devono avere il nome del codice dello smiley che effettivamente userai. Quindi, ad esempio, se avevi uno smiley il cui nome del file immagine era “cheery_icon0.gif” e che veniva visualizzato quando gli utenti scrivevano :cheer:, dovrai rinominare quell’immagine in cheer.gif e caricarla negli emoji (in admin cp > personalizza > emoji).

Ora, diventa ancora più interessante quando hai un gruppo di smilies che in phpbb venivano visualizzati con cose come:

<:-)
%-)
:3

Quindi, ad esempio, avevo uno smiley con:

 codice : <:-) e chiamato "_1partyguyhat.gif"

Prima di tutto ho dovuto decidere quale sarebbe stato il nuovo codice in Discourse, dato che non si possono nominare file con ‘<:-)’. Poi ho rinominato il gif in quel codice e infine aggiunto la mappatura corrispondente nel file delle impostazioni.

Per me, per quello specifico smiley, era:

party_hat: '<:-)'

Quello che succede poi durante l’importazione è che tutte le istanze in un post in cui qualcuno ha scritto <:slight_smile: vengono tradotte in :party_hat:.
Verrà quindi utilizzato l’emoji del cappello da festa per visualizzare lo smiley quando è disponibile negli emoji.

Consigli quando devi convertire 120 smilies :wink:

  • Crea un post di prova nella tua istanza phpbb3 con TUTTI gli smilies inclusi
  • Durante l’importazione, puoi scorrere rapidamente quel post e verificare se è rimasto del testo, oppure con l’opzione [modifica] vedere se alcuni sono stati tradotti in immagini invece che solo nel codice emoji. (Credetemi, può succedere se dimentichi un : o scambi un ; con un : )

Risoluzione problemi settings.yml

  • Devi decommentare la riga emojis. (L’avevo completamente ignorata)
  • Il formato deve avere 4 spazi davanti a un codice smiley
  • Devi aggiungere tutti i codici, anche se avevi già uno smiley codificato come :cheer: e hai inserito un cheer.gif negli emoji. Se non lo fai, verrà ancora tradotto in un file immagine invece che in un codice emoji.
  • Se capita di avere uno smiley codificato come :yes: o :no:, devi commentarli perché altrimenti verranno interpretati come valori booleani :true: o :false:. In tal caso, dovresti fare qualcosa del genere: "yes": ':yes:' per codificare quell’emoji specifico.
  • Edit: oh, un’altra curiosità che mi sono dimenticato: se usi un trattino negli emoji come ‘party-hat’, quando carichi l’immagine su Discourse verrà convertito in un trattino basso, quindi il nome diventerà ‘party_hat’. Quindi non usare ‘-’ ma solo ‘_’.

Spero che questo abbia aiutato qualcuno; so che ci ho messo quasi due settimane prima di riuscire finalmente a importarli tutti correttamente.

8 Mi Piace