Nel forum che ho trasferito, una volta era installato xengallery, quindi ho dovuto cambiare quanto segue, poiché la tabella xfgallery non esisteva più.
def get_xf_sql(type, id)
case type
when :gallery
return "SELECT NULL WHERE 1=0;"
when :attachment
<<-SQL
SELECT a.attachment_id, a.data_id, d.filename, d.file_hash, d.user_id
FROM #{TABLE_PREFIX}attachment AS a
INNER JOIN #{TABLE_PREFIX}attachment_data d ON a.data_id = d.data_id
WHERE attachment_id = #{id}
AND content_type = 'post'
SQL
end
end
L’esecuzione di quanto sopra mi dà il seguente errore. Ho controllato il Gemfile e contiene solo questa riga: gem ‘mysql2’
Questo Gemfile non include una sorgente globale esplicita.
Non utilizzare una sorgente globale esplicita potrebbe comportare la generazione di un lockfile diverso a seconda delle gem installate localmente prima dell'esecuzione di bundler.
Definisci invece una sorgente globale nel tuo Gemfile in questo modo: source "https://rubygems.org".
Impossibile trovare la gem 'mysql2' nelle gem installate localmente.
root@ip-172-566-459-13-app:/#
Ok, sono riuscito a passare alla fase successiva. Qualcuno sopra ha scritto che dobbiamo trovarci nella cartella /var/www/discourse sul container e poi aggiungere la gem.
Sto ricevendo questo errore. Cosa potrei star sbagliando?
`/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:63:in “rescue in new_client”: Non siamo riusciti a trovare il tuo database: discourse.
Le configurazioni del database disponibili si trovano in config/database.yml. (ActiveRecord::NoDatabaseError)Per risolvere questo errore:
Non hai creato il database o lo hai eliminato? Per creare il database, esegui:
bin/rails db:create
È cambiato il nome del database? Verifica che config/database.yml contenga il nome del database corretto.`
Risolto: stavo eseguendo come utente root, ho dovuto passare all’utente ‘discourse’. L’importazione è iniziata.
Ho acquistato un server ragionevolmente buono con 4 CPU e 16 GB di RAM. Al ritmo con cui i post vengono migrati, ci vorranno 9 giorni solo per la migrazione dei post. La migrazione degli utenti ha richiesto 2,5 ore. Si può dire tranquillamente che così com’è non fa per me, ma almeno posso passare qualche mese a familiarizzare finché non troverò una soluzione per questa migrazione di massa.
PS:
Nello script di migrazione vedo che le email duplicate non vengono importate. Quali sono i diversi modi in cui viene determinato un duplicato? Ho notato che xyz@gmail.com viene trattato allo stesso modo di xyz+1@gmail.com e xy.z@gmail.com
Ho provato a fare migrazioni su VPS con specifiche simili al mio computer personale, ma per qualche motivo è sempre stato molto, molto più lento che usare il mio computer.
Oggigiorno, faccio sempre le mie migrazioni localmente. Quanti post hai?
La velocità della singola CPU è il fattore importante.
Sulle mie macchine, un tasso di 800-1000 utenti o post/minuto è abbastanza tipico.
Nota che quando esegui l’importazione finale, importerà solo gli utenti e i post che non sono già stati importati, quindi non ci vorrà molto.
Disattiva l’impostazione del sito Normalize emails (disattivato era l’impostazione predefinita fino a poco tempo fa). Probabilmente dovrebbe essere disattivato in questa funzione qui:
Puoi metterlo nella tua versione personalizzata dello script xenforo con SiteSetting.normalize_emails=false. Non sono sicuro di cosa sia successo a quegli utenti con email duplicate; ci sono due cose ovvie da fare, dare loro un indirizzo email fittizio o saltare l’importazione. Sembra che dia loro quelli fittizi? (Ed è molto probabile che siano, di fatto, utenti fittizi comunque). Se li ha saltati, eseguire nuovamente lo script li importerà.
Sì, sul mio portatile, sta elaborando le cose molto più velocemente a 1000 elementi al minuto. Circa 2 volte più veloce rispetto al server. Comunque ci vogliono circa 3 giorni.
Ho esaminato le email saltate e sembra che stia facendo un buon lavoro ignorando quegli account. Li unirò prima dell’importazione finale. Appena 20 casi circa.
Nota che quando farai l’importazione finale, importerà solo gli utenti e i post che non sono già stati importati, quindi non richiederà molto tempo.
Grazie per averlo fatto notare. L’ho osservato anch’io e sembra che questo sia ciò che salverà la situazione quando farò l’importazione finale. Quindi faccio un backup e un ripristino su D-3 e poi un altro backup e ripristino con il nuovo file di backup del database il Giorno 0. È corretto?
Quei backup e ripristini sono sul sito Xenforo, o hai un sito Discourse live a cui importerai i dati Xenforo?
Finché non apporti modifiche allo script che richiedono la reimportazione dei dati e ciò che hai ora sul tuo laptop è ciò che desideri sul tuo server Discourse, puoi semplicemente continuare a ottenere nuovi dump del database Xenforo e importarli (per testare, vedere quanto tempo ci vuole, ecc.) e poi il giorno del passaggio, blocchi il sito Xenforo, ottieni quel database, esegui nuovamente lo script e carichi sul tuo server Discourse.
Se hai già dati sul tuo sito Discourse che desideri conservare, le cose sono molto più complicate poiché dovrai bloccare quel sito, quindi ottenere i dati Xenforo e quindi procedere come descritto sopra.
Sarà una nuova installazione di Discourse, il che renderà le cose più semplici.
Ho parecchio tempo a disposizione poiché voglio testare le migrazioni più volte, familiarizzare a fondo con Discourse, configurare tutti i componenti aggiuntivi come desidero e magari anche sporcarmi le mani con la personalizzazione di alcuni componenti aggiuntivi.
Ciò che hai spiegato mi toglie un grosso peso dallo stomaco, dato che pensavo di dover anche capire come gestire le importazioni massive.
Sono tornato con una domanda, lo script di importazione produce dei log? La mia importazione di prova è bloccata al 98,2% da alcune ore.
Un’altra cosa che ho capito, se riavvio la migrazione, ci vogliono circa 30 secondi per saltare un batch di 1000 post. Quindi, in effetti, la velocità è ora di 2000 elementi al minuto. Non è un miglioramento significativo rispetto ai 1000 post al minuto della prima importazione, poiché anche nell’ultima importazione il giorno del cutover, ci vorrà circa un giorno. 23 ore delle quali serviranno solo a saltare elementi già importati.
Sì, salterà tutti i dati che sono già stati importati. E lo fa molto più velocemente di 2000 post/minuto. Sospetto che vedrai quando la riavvierai ora.
Sono riuscito a importare avatar e allegati. Ho copiato queste cartelle.
/internal_data/attachments
/data/avatars
Per rispondere alla mia domanda, avatar e allegati vengono finalizzati una volta importati. Se un utente cambia il proprio avatar dopo che il suo ID è stato importato, non verrà importato/aggiornato perché quel post o utente verrà saltato nella seconda esecuzione.
Ora devo solo capire l’importazione delle conversazioni (si può saltare ma è utile averla) e i reindirizzamenti permanenti.
@Fajfi - Grazie per il tuo contributo allo script di importazione. Ha funzionato perfettamente per avatar e allegati. È ancora in esecuzione e non ho ancora raggiunto la parte dei “mi piace”.
Corretta l’importazione delle conversazioni. Sono riuscito a importare oltre mezzo milione di messaggi da XF2.3 in Discourse. Ho sollevato una PR nel caso qualcuno fosse interessato.
----EDIT----
Sollevata un’altra PR con una correzione per l’importazione dei “mi piace”. È sorprendente che nessuno abbia migrato da XF2.1+ a Discourse fino ad ora. I “mi piace” sono stati rinominati in “reazioni” nel 2019, quando è uscito XF2.1.