Migrare un forum XenForo a Discourse

Solo 5k post e circa 1k membri

3 Mi Piace

Sto ancora aspettando l’importatore della grande tabella, per provare e testare il mio post da 18m sul forum.

3 Mi Piace

Per XenForo? Abbiamo altre importazioni massicce, ma è vero che per 18 milioni di post sarebbe molto lento!

4 Mi Piace

Stiamo sviluppando un nostro importatore di massa interno per 27 milioni di post. Il processo è passato da poco più di una settimana (escludendo gli allegati) a meno di un giorno, inclusi tutti i dati. Ieri abbiamo completato il nostro primo test di importazione senza alcun errore. Roba davvero entusiasmante.

4 Mi Piace

Grazie Justin, ci ho dato un’occhiata veloce: ti sembra ok? (Sentiti libero di aggiungerlo all’importatore ufficiale se vuoi)

  XENFORO_DB = "xenforo_db_3"
  TABLE_PREFIX = "xf_"
  BATCH_SIZE = 1000
  ATTACHMENT_DIR = '/FULL/PATH/TO/attachments'
  AVATAR_DIR = '/FULL/PATH/TO/avatars'

(Aggiunta l’ultima riga^^ - significa che dovrai copiare gli avatar lì)

  def execute
    import_users
    import_categories
    import_posts
    import_avatars
  end

(Aggiunta l’ultima riga^^)

  def import_avatars
    if AVATAR_DIR
      users = User.all
      users.each do |u|
        unless u.custom_fields["import_id"].nil?
          import_id = u.custom_fields["import_id"]
          if import_id.to_i < 1000
            dir_num = "0"
          elsif import_id.to_i > 1000
            dir_num = import_id.first
          end
        
          avatar_filename = "#{import_id}.jpg"
          file_path = "#{AVATAR_DIR}/l/#{dir_num}"
          file_path_and_name = "#{file_path}/#{avatar_filename}"

          if File.exists?(file_path_and_name)
            upload = create_upload(u.id, file_path_and_name, avatar_filename)
            if upload.persisted?
              u.import_mode = false
              u.create_user_avatar
              u.import_mode = true
              u.user_avatar.update(custom_upload_id: upload.id)
              u.update(uploaded_avatar_id: upload.id)
            else
              puts "Errore: Caricamento non salvato per #{u.username} #{avatar_filename}!"
            end
          end
        end
      end
    end
  end

È molto tardi qui, quindi potrei aver commesso degli errori o aver saltato un sacco di cose, ma questo presuppone che tutti gli avatar siano in formato .jpg (che sembra essere il caso per tutti i miei). Non ero troppo sicuro dei switch u.import_mode, quindi li ho solo commentati.

Completamente non testato (sono quasi le 5 del mattino qui :zzz:)

Ho fatto un test sulla mia macchina di sviluppo su un forum con 100K post e ci sono voluti 90 minuti. Quello su cui voglio fare l’importazione ha qualche milione di post, quindi forse 10 volte di più?

Bellissimo! Lo condividerai con noi? Hai un’idea di quando?

4 Mi Piace

L’obiettivo attuale è assicurarsi che funzioni perfettamente e, una volta completata la migrazione del nostro sito, pubblicarlo infine nel repository di Discourse in modo che anche altri possano utilizzarlo.

5 Mi Piace

Una guida passo dopo passo sarebbe molto utile, per favore :).

1 Mi Piace

Per 5.000 post e circa 600 allegati, su un vecchio Xeon con un disco SSD, ci sono voluti circa 10 minuti. Ti consiglio di procurarti un server con risorse adeguate, eseguire l’importazione in modalità offline e lasciarlo lavorare.

5 Mi Piace

Fantastico! Non vediamo l’ora.

1 Mi Piace

Ok, ho fatto un test molto rapido e le modifiche allo script sembrano aver funzionato. Ora sto eseguendo un test completo con diverse migliaia di membri e 100.000 post. Farò sapere se funziona…

1 Mi Piace

Ciao, ci sono novità? Se hai bisogno di aiuto con i test, sarò felice di aiutarti.

Sto ricevendo un errore che indica che la tabella users non esiste quando eseguo lo script XenForo. Qualsiasi aiuto è davvero apprezzato!

Ho letto a riguardo per un’ora ma non sono ancora riuscito a risolvere il problema.

Ci sono alcune variabili all’inizio dello script che devi compilare in modo che possa connettersi al tuo database MySQL di xenForo ed eseguire query sui dati. Credo che “import_db” possa essere il valore segnaposto: verifica che quei valori siano compilati correttamente.

3 Mi Piace

@Ghan Pensavo di importare in import_db con questo: mysql -u root -p import_db < /shared/db.sql

Il mio xenforo.rb è:

Ah, ok. Se questo è il nome del tuo database, allora controlla di avere il nome della tabella corretto. La tua tabella potrebbe essere xf_user con il prefisso, il che causerebbe un problema. Dovrebbe esserci anche una variabile TABLE_PREFIX nello script.

4 Mi Piace

@Ghan Grazie!

Al momento sono ancora bloccato sullo script di importazione.
Itera correttamente tra utenti e categorie. Tuttavia, nella funzione import_posts si blocca fino a quando, dopo alcune ore, non va in timeout.

Sto iniziando a fare il debug stampando semplicemente i valori all’interno di import_posts:

Tutte le stampe successive all’assegnazione della variabile results non vengono mai visualizzate.

Nel caso in cui qualcuno stia cercando di importare un forum vb3, questa guida potrebbe essere d’aiuto se si dispone anche di una licenza Xenforo:

2 Mi Piace

Questo importatore importa anche i tag da xenForo insieme ai thread a cui sono collegati?

È sempre una buona idea dare un’occhiata al codice sorgente.

Penso che la risposta sia… sì (ma non ho molta familiarità con le strutture dati di Xenforo):

3 Mi Piace

Quindi, sembra che almeno una volta abbia importato alcuni tag per qualcuno in determinate condizioni. Se sei fortunato, funzionerà anche per te!

3 Mi Piace