Migrare un forum phpBB3 a Discourse

Ho riscontrato lo stesso errore. Credo che si verifichi quando si ottiene un file shared/standalone/import/mysql/imported non aggiornato. Eliminando quel file l’errore è stato risolto.

2 Mi Piace

La migrazione delle password, apparentemente, non ha funzionato per me.

Ho impostato passwords: true in shared/standalone/import/settings.yml prima di importare da un dump di phpBB 3.0. Ho questa configurazione in containers/app.yml:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discoursehosting/discourse-migratepassword.git

Dopo l’importazione, ho eseguito ./launcher rebuild app. L’importazione sembra essere andata a buon fine, tranne per il fatto che non riesco ad accedere con la mia password da phpBB. Non ho notato messaggi di errore rilevanti durante l’importazione e la password è lunga 20 caratteri, quindi dovrebbe superare il limite minimo di lunghezza.

Cosa dovrei cercare per risolvere il problema?

Un po’ più di informazioni: vedo voci import_pass nella tabella user_custom_fields del database che corrispondono agli hash delle password presenti nel database phpBB, quindi questa parte sembra aver funzionato?

Modifica: Oh, ho capito cosa è successo. Avevo completamente dimenticato che avevamo passato all’autenticazione LDAP per phpBB… Le password che ho importato erano perfettamente valide, solo vecchie di 15 anni! Quindi ora devo mettere insieme qualcosa per estrarre gli hash delle password da LDAP invece… :slight_smile:

1 Mi Piace

Ciao a tutti,

Qualcuno ha effettuato un’importazione con allegati di recente?

Utenti e post funzionano perfettamente, ma gli allegati non vengono aggiunti ai post.

In alcuni post ho ancora il bbcode

La cosa strana è che il contenuto della cartella files viene trasferito nella cartella uploads di Discourse.

Inizialmente pensavo fosse dovuto al fatto che la versione 3.0.12 di phpBB fosse troppo vecchia, quindi ho aggiornato phpBB alla 3.0.14, pulito Discourse e la cartella uploads, e riprovato l’importazione. Senza successo.

Ho aggiornato la versione di phpBB alla 3.2.0 (dopo aver eseguito il loro toolkit di supporto per pulire il database dei mod) su un server di test, ma ancora senza risultati.

Prima di indagare ulteriormente sul mio database, volevo essere sicuro che lo script funzioni per tutti.

Non credo di aver commesso errori nel file delle impostazioni, ma forse un’occhiata fresca potrebbe aiutare.

# Questo è un file di esempio per l'importatore phpBB3.

database:
  type: MySQL # Attualmente è supportato solo MySQL
  host: localhost
  port: 3306
  username: root
  password:
  schema: phpbb
  table_prefix: phpbb_ # Modifica questo se il tuo forum utilizza un prefisso diverso. Di solito tutti i nomi delle tabelle iniziano con phpbb_
  batch_size: 1000 # Non modificare questo valore a meno che tu non sappia cosa stai facendo. Il valore predefinito (1000) dovrebbe funzionare perfettamente.

import:
  # Imposta questo se importi più forum phpBB in un singolo forum Discourse.
  #
  # Ad esempio, quando importi più siti, anteponi a tutti gli ID importati
  # il prefisso 'first' per evitare conflitti. Le successive esecuzioni dell'importazione devono avere
  # un 'site_name' diverso.
  #
  # site_name: first
  #
  site_name:

  # Crea nuove categorie
  #
  # Ad esempio, per creare una categoria genitore e una sottocategoria.
  #
  # new_categories:
  # - forum_id: foo
  #   name: Categoria Foo
  # - forum_id: bar
  #   name: Categoria Bar
  #   parent_id: foo
  #
  new_categories: []

  # Mappature delle categorie
  #
  # Ad esempio, i topic della categoria 1 e 2 di phpBB verranno importati
  # nella nuova categoria "Categoria Foo", i topic della categoria 3 di phpBB
  # verranno importati nella sottocategoria "Categoria Bar", i topic della categoria 4 di phpBB
  # verranno uniti alla categoria 5 e la categoria 6 verrà saltata.
  #
  # category_mappings:
  #   1: foo
  #   2: foo
  #   3: bar
  #   4: 5
  #   6: SKIP
  #
  category_mappings: {}

  # Mappature dei tag
  #
  # Ad esempio, i topic importati dalla categoria 1 di phpBB verranno contrassegnati
  # con 'first-category', ecc.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings:

  # Mappatura dei ruoli ai livelli di fiducia
  #
  # Mappa i livelli di ruolo di phpBB 3.x ai livelli di fiducia
  # Gli utenti con un ruolo di almeno 3000 avranno TL3, ecc.
  #
  # rank_mapping:
  #   trust_level_1: 200
  #   trust_level_2: 1000
  #   trust_level_3: 3000
  #
  rank_mapping:

  # ATTENZIONE: Non attivare questa opzione a meno che tu non sappia cosa stai facendo.
  # Probabilmente romperà la conversione da BBCode a Markdown e rallenterà l'importazione.
  use_bbcode_to_md: false

  # Questo è il percorso della directory principale della tua installazione attuale di phpBB (o di una sua copia).
  # L'importatore si aspetta di trovare le directory /files e /images all'interno della directory base.
  # Devi modificare questo valore in qualcosa come /var/www/phpbb se non stai utilizzando l'importatore basato su Docker.
  # Questo è necessario solo se vuoi importare avatar, allegati o smiley personalizzati.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # Questo è necessario per riscrivere i link interni nei post
    original: ***.com   # senza http(s)://
    new: https://****.org       # con http:// o https://

  # Abilita questa opzione se vuoi reindirizzare i vecchi link del forum alle nuove posizioni.
  permalinks:
    categories: true  # reindirizza /viewforum.php?f=1 a /c/nome-categoria
    topics: true      # reindirizza /viewtopic.php?f=6&t=43 a /t/nome-topic/81
    posts: false      # reindirizza /viewtopic.php?p=2455#p2455 a /t/nome-topic/81/4
    # Aggiungi un prefisso a ogni tipo di link, ad esempio 'forum' per reindirizzare /forum/viewtopic.php?f=6&t=43 a /t/nome-topic/81
    # Lascia vuoto se il tuo forum non era installato in una sottocartella.
    prefix:

  avatars:
    uploaded: true  # importa avatar caricati
    gallery: false   # importa gli avatar predefiniti offerti da phpBB
    remote: false   # ATTENZIONE: Questo può rallentare notevolmente l'importazione. Provcherà a scaricare avatar remoti.

  # Quando true: Gli utenti anonimi vengono importati come utenti sospesi. Non possono accedere e non hanno un indirizzo email.
  # Quando false: Verrà utilizzato l'utente di sistema per tutti gli utenti anonimi.
  anonymous_users: true

  # Abilita questa opzione se vuoi importare gli hash delle password per utilizzare il plugin "migratepassword".
  # Questo consentirà agli utenti di accedere con la loro password attuale.
  # Il plugin è disponibile all'indirizzo: https://github.com/discoursehosting/discourse-migratepassword
  passwords: false

  # Per impostazione predefinita, vengono importati tutti gli elementi seguenti. Puoi disabilitarli impostandoli su false.
  bookmarks: true
  attachments: true
  private_messages: false
  polls: false

  # Quando true: ogni utente importato avrà il nome utente originale di phpBB come nome
  # Quando false: il nome di ogni utente importato sarà vuoto a meno che il nome utente non sia stato modificato durante l'importazione
  username_as_name: false

  # Mappa gli Emoji agli smiley utilizzati in phpBB. La maggior parte degli smiley predefiniti ha già una mappatura, ma puoi sovrascrivere
  # le mappature qui se non ti piacciono alcune di esse.
  # La sintassi della mappatura è: nome_emoji: 'smiley_in_phpbb'
  # Oppure mappa più smiley a un singolo Emoji: nome_emoji: ['smiley1', 'smiley2']
  emojis:
    # ecco due esempi di mappatura...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'
1 Mi Piace

Questo si verifica specificamente se import_phpbb3.sh non trova il file phpbb_mysql.sql nel percorso corretto.

1 Mi Piace

Presumo che questo valga anche per phpBB, dato che sto cercando di importare dump da v3.2.x a v3.3.3, ma i post genitore mancanti sono migliaia. Anche con esecuzioni multiple e backup sequenziali di più versioni. Per semplificare il debug, lo script potrebbe visualizzare l’URL per l’ID del messaggio verso il vecchio forum per controlli di riferimento. (… viewtopic.php?p=57912)

1 Mi Piace

In realtà, visto che ci siamo, perché non registrare tutte le righe di importazione fallite con i relativi messaggi di errore in un file dump da condividere per l’analisi… solo un pensiero…

Almeno in un caso, c’è un argomento su viewtopic.php?f=3&t=1472, ma il primo post su viewtopic.php?p=145185 è stato eliminato/rimosso, ecc., e ora il primo post dell’argomento è viewtopic.php?p=145186, che è “una risposta”.

Forse, per chiarezza, si potrebbe specificare esplicitamente se l’argomento padre non è letteralmente presente nel dump o semplicemente non è stato importato nella ricostruzione.

1 Mi Piace

Mi farebbe ancora piacere ricevere un piccolo feedback per sapere se tutti sono riusciti a completare un’importazione completa con gli allegati di recente. Non riesco a far funzionare questa cosa.

Al momento, non so se il problema derivi dallo script o dal database del forum phpbb :pray:

1 Mi Piace

Hai scaricato le immagini e le hai posizionate nel posto giusto?

Non l’ho fatto di recente, ma mi sorprenderebbe se non funzionasse.

1 Mi Piace

Sì, ho ricontrollato le cartelle e il file delle impostazioni. La cosa strana è che vengono importate nelle cartelle predefinite/originali, ma non integrate nei post.

Era una versione molto vecchia di phpBB, con alcuni plugin. Ho fatto un po’ di pulizia e ho aggiornato con successo da phpBB 3.0.12 all’ultima versione 3.1 o 3.2, testando un’importazione per ciascuna versione, ma non ha funzionato. Potrebbe essere un problema legato al database. Per questo motivo, se riesci a completare con successo un’importazione completa la prossima volta, sarebbe utile sapere da te. Se si tratta del database di phpBB, farò un’analisi approfondita con un po’ di aiuto; se invece è lo script, posso aspettare. Grazie per il tuo messaggio!

1 Mi Piace

Non ricordo l’ultima volta che ho eseguito un’importazione da phpBB3; sospetto (anche se non posso esserne certo) che sia perché lo script funziona così bene.

Dato che vengono caricati su Discourse, il problema è probabilmente legato a come vengono citati nei post di phpBB. Hai visto qualche errore durante l’esecuzione? Potrebbero fornire indizi. O forse i plugin hanno modificato il modo in cui sono rappresentati nei post e/o nel database. Probabilmente dovrai fare un po’ di ricerca.

2 Mi Piace

Ho avuto alcuni “file mancanti” e “orario del post errato”; ho riscontrato questi problemi anche durante le mie precedenti importazioni, quindi non credo siano un grosso problema. Ho anche molti errori “Post genitore non esistente” al primo avvio, ma è stato già menzionato in precedenza in questa discussione e un secondo esecuzione dello script risolve il problema.

A parte questo, lo script ha funzionato molto bene, senza problemi maggiori.

C’era un plugin (principalmente un file htaccess, apparentemente; non ho gestito io questo forum) per organizzare i file in sottocartelle (per mese e anno), ma li ho organizzati tutti nella stessa cartella e gli aggiornamenti su una versione pulita di phpBB hanno funzionato correttamente. Tutti i file importati erano attivi su phpBB 3.1 e 3.2.

Approfondirò un po’ di più il database; potrei avere un file SQL da un’importazione precedente. Confronterò le tabelle allegati e post sul mio server di test. Forse c’è qualcosa che mi sono perso.

4 Mi Piace

Hai ragione, c’è un bug in TextProcessor::process_attachments che impedisce l’incorporamento degli allegati nel Markdown del post. Ho creato una PR.

5 Mi Piace

Ottimo lavoro, dopo i due passaggi l’importazione sembra perfetta. Grazie!

4 Mi Piace

Ciao, ho appena importato circa 35.000 post; durante l’importazione ho notato molti messaggi del tipo “Parent post XXXXXX doesn’t exist. Skipping”. Al termine del processo, nel forum Discourse ho trovato tutti (credo) i “topic”, ma senza alcuna risposta. Di fatto, è stato importato solo il topic, non i post (tranne il primo, che contiene il testo del topic stesso).
Inoltre, non sono stati importati gli avatar, anche se li ho posizionati nella corretta directory sotto la cartella “import”.

Il forum originale era in phpBB2, regolarmente importato e visibile con tutti i suoi post in phpBB3, ma ho cancellato molti messaggi vecchi in precedenza; tuttavia, in phpBB3 sembra tutto a posto.

Hai qualche suggerimento? Esiste uno script di importazione che posso controllare?

1 Mi Piace

È così da alcune settimane/mesi, ma non preoccuparti, l’importazione verrà completata dopo aver eseguito nuovamente il comando import_phpbb3.sh

3 Mi Piace

Grazie mille! Ha funzionato per i post, ma non per gli avatar. Continuo a cercare una soluzione.

1 Mi Piace

Ho letto l’argomento più volte e ho effettuato alcune migrazioni, ma ogni volta sono stato confuso da questo plugin e ho riscontrato bug simili. Sono alla mia terza migrazione e mi ha fatto impazzire. Penso che il funzionamento di questo plugin possa confondere gli utenti che effettuano migrazioni.

Dovrebbe essere specificato da qualche parte che il plugin deve essere attivato su Discourse dopo il processo di migrazione. Se è già scritto da qualche parte, potrei essermelo perso e forse questa informazione dovrebbe essere enfatizzata.

Per favore, correggimi se sbaglio. :slight_smile:

1 Mi Piace

Segnalo una correzione per la conversione delle faccine nell’importazione da phpBB 3.0.7.

  • Alcune faccine non sono state convertite correttamente in Discourse:


    (ma non sempre, per qualche motivo; alcune emoji identiche venivano visualizzate a volte, altre no. All’inizio sembrava casuale)

  • Inoltre, alcune emoji sono semplicemente scomparse:
    phpBB:
    image
    Discourse:
    image

Il problema derivava dalla regex utilizzata in replace_smilies(text) da

Regex errata:

<!-- s(\S+)--><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?:\S+ -->

Si noti come l’inizio della regex non presupponga la presenza di un carattere : dopo:

<!-- s

Ma lo presuppone alla fine della regex:

<!-- s?:\S+ -->

(Inoltre mi chiedo perché ci sia un ? che corrisponde a 0 o 1 del carattere s alla fine della regex, dove non c’è all’inizio della regex)

Ho rimosso questo : dalla regex e i miei due problemi con le faccine sembrano completamente risolti.

Sul mio forum phpbb, molte faccine iniziavano effettivamente con : come :mrgreen: o :evil:, ma alcune no, come 8-) o ;)
La vecchia regex portava a catture errate delle faccine. Ad esempio, più faccine una accanto all’altra venivano catturate come una singola.


Regex corretta:

<!-- s(\S+)--><img src="{SMILIES_PATH}/.+?" alt=".*?" title=".*?" /><!-- s?\S+ -->

Non sto correggendo il codice direttamente nel repository Discourse perché non ho familiarità con l’uso di git, e inoltre non sono sicuro che influenzi le importazioni da altre versioni di phpBB. Non voglio rovinare nulla.


Comunque, se qualcuno riscontra gli stessi problemi miei, ecco la soluzione.

4 Mi Piace

Un altro problema risolto che potrebbe aiutare le persone nel mio caso durante una migrazione di phpBB 3.0.7.

Per qualche motivo, i contenuti dei post del mio forum phpBB a volte avevano più spazi vuoti all’inizio delle righe. Sospetto che alcuni utenti “amano” premere freneticamente il tasto spazio senza prestare attenzione quando scrivono il loro messaggio, e non aveva importanza poiché la pagina renderizzata ignorava questi spazi multipli:

Contenuto testuale phpBB grezzo:

Salut tous  :)
  
     Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK  :evil: mais il a fait ces 2000 kms sans broncher  ;)  
Maintenant le CT est OK . Merci L'Atelier Du Raz  8-')

    Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans  :roll: 
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !? 
What's About ?

             Je trouve ça un peu limte  :evil: 
Merci tous, fred

Pagina renderizzata nel browser:


Ma durante l’importazione phpBB → Discourse, questi spazi esistenti sono stati convertiti in blocchi di codice:

Ecco come dovrebbe essere visualizzato:


L’ho risolto aggiungendo una regex che rimuove gli spazi all’inizio di ogni riga

 text.gsub!(/^[^\\S\\r\\n]+/, "\\n")

Ho aggiunto questo appena prima di process_smilies(text) in questo file:


Un altro problema che ho riscontrato.
In questo codice (ancora in 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]Testo.[/quote:b0wtlzex]
      text.gsub!(/:(?:\\w{8})\\]/, ']')

Nel mio database, le lunghezze di questi hash variano tra 5 e 8 caratteri, ma la regex rimuove solo gli hash che sono esattamente di 8 caratteri. Quindi, la mia importazione ha mantenuto hash più corti invece di rimuoverli.
Ho risolto cambiando la regex in:

text.gsub!(/:(?:\\w{5,8})\\]/, ']')

Aggiungo un problema minore, sempre nello stesso file. La regex che rimuove i tag BBCode [color] si aspetta un valore esadecimale preceduto da un # obbligatorio. Ma [color] accetta anche stringhe come “red”, “blue”, ecc. come valore. Quindi ho modificato la regex originale:

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

Aggiungendo un ? dopo il # per rendere il # opzionale.
Codice corretto:

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

Non so se i miei problemi siano comuni nelle importazioni phpBB, o se siano molto specifici del mio caso. Se quest’ultimo, spero che le mie spiegazioni qui non siano indesiderate o superflue. Fammi sapere se è così in modo che non sia imbarazzante. :grinning_face_with_smiling_eyes:


Modifica: È possibile fare in modo che dopo una migrazione, tutti gli argomenti esistenti siano impostati come “letti” per ogni utente esistente?

L’obiettivo è evitare che, dopo la migrazione, gli utenti esistenti che cliccano su argomenti esistenti (e talvolta vecchi) vengano reindirizzati al primo messaggio di quegli argomenti che avevano già letto prima della migrazione.

Idealmente, gli utenti esistenti che cliccano su argomenti esistenti dovrebbero aprire non il primo, ma l’ultimo messaggio (dalla fine della migrazione, ovviamente).

È comunque un piccolo problema di qualità della vita (e svanirà naturalmente dopo qualche settimana man mano che gli utenti utilizzano il forum e leggono gli argomenti), ma mi è stata posta questa domanda.

7 Mi Piace

Grazie per aver condiviso queste correzioni!

Ho dovuto apportare aggiustamenti simili alle regex per migrazioni passate, quindi queste saranno utili per future importazioni di phpbb.

Questo argomento potrebbe essere utile How to mark imported posts as read - #2 by stuwest

3 Mi Piace