Dopo aver importato il mio primo vecchio forum da phpBB tre anni fa, sono felice di aver motivato l’amministratore di un forum internazionale a migrare un altro forum, più grande (180.000 membri, 1,6 milioni di messaggi), su Discourse.
Questo forum utilizza vBulletin5.
L’importazione è andata a buon fine fino all’utente numero 71712, a causa di caratteri non validi nel campo del sito web:
1: from /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:73:in `parse' /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:21:in `split': URI must be ascii only \"http://url-redacted.com - \\u00E6\\u00E5\\u00F1\\u00F2\\u00EA\\u00EE\\u00E5 \\u00EF\\u00EE\\u00F0\\u00ED\\u00EE \\u00F1\\u00EC\\u00EE\\u00F2\\u00F0\\u00E5\\u00F2\\u00FC \\u00EE\\u00ED\\u00EB\\u00E0\\u00E9\\u00ED\" (URI::InvalidURIError)
e:
1: from /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2394:in `defer_validation' /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2475:in `validate': Invalid character in host: 'url-redacted.com.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí' (Addressable::URI::InvalidURIError)
Se l’URL “deve essere solo ASCII”, forse il contenuto del campo potrebbe essere semplicemente rimosso o sanificato invece di generare un errore e fermare lo script?
Proverò a rimuovere questo utente dal database prima di riprovare l’importazione.
Inoltre, ho un’altra domanda. Gli avatar sono memorizzati nel database e sono stati importati con successo.
Ma che dire degli allegati? Nel mio caso, sono anch’essi nel database, come avviene di default con vBulletin. Verranno importati, o devono essere memorizzati come campi separati?
Quando abbiamo migrato il nostro vecchio forum vB3, lo script di migrazione ha generato molti errori a causa di alcuni strani caratteri corrotti o di allegati anomali che avevano inquinato il database in 15 anni di post.
Quello che ho fatto, non molto elegante, ma ha funzionato per noi:
Quando si verificavano questi errori, ho semplicemente modificato lo script di migrazione nella riga dove si presentava l’errore, avvolgendo la riga problematica con:
begin
#riga ruby problematica qui
rescue
puts "ecco alcune informazioni interessanti sull'errore"
end
La mia esperienza nella migrazione di circa 1 milione di post da vB3 a Discourse mi ha insegnato che uno dei miei migliori amici è stato:
begin
rescue
end
Abbiamo perso alcuni post malformati, ma per me era accettabile sacrificare una manciata di post su un milione.
Dato che non conosco Rails, ho semplicemente sostituito il contenuto del campo ‘website’ con una stringa vuota. In ogni caso, era un account spam ed è l’unico errore presente in quasi la metà degli utenti già elaborati.
Quindi non è un grosso problema se non viene risolto nel codice dello script, anche se sarebbe bello se non bloccasse l’importazione
Per quanto riguarda gli allegati, proverò comunque a importare i messaggi e vedrò se gli allegati vengono importati o meno (o se appare qualche messaggio di errore), se nel frattempo non ricevo queste informazioni.
Anche noi abbiamo dovuto scrivere alcuni wrapper Ruby begin rescue end quando abbiamo importato gli allegati di vB3 in Discourse; ma alla fine siamo riusciti a migrare quasi tutti gli allegati, le avatar e le immagini dei profili.
Quando abbiamo iniziato, non avevo alcuna esperienza con Ruby e Rails; ma ora sono un grande fan di Ruby e Rails, grazie a Discourse; e scrivo un po’ di codice Rails ogni giorno.
Credo che sia utile imparare qualcosa durante la migrazione, se si ha l’interesse.