Solo 5k post e circa 1k membri
Sto ancora aspettando l’importatore della grande tabella, per provare e testare il mio post da 18m sul forum.
Per XenForo? Abbiamo altre importazioni massicce, ma è vero che per 18 milioni di post sarebbe molto lento!
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.
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
)
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?
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.
Una guida passo dopo passo sarebbe molto utile, per favore :).
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.
Fantastico! Non vediamo l’ora.
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…
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.
@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.
@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:
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):
Quindi, sembra che almeno una volta abbia importato alcuni tag per qualcuno in determinate condizioni. Se sei fortunato, funzionerà anche per te!



