Après avoir importé mon premier ancien forum depuis phpBB il y a 3 ans, je suis ravi d’avoir motivé l’administrateur d’un forum communautaire international à migrer un autre forum, plus grand (180 000 membres, 1,6 million de messages), vers Discourse.
Ce forum utilise vBulletin5.
L’importation s’est bien déroulée jusqu’au membre numéro 71712, la raison étant des caractères invalides dans le champ du site 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)
et :
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)
Si l’URL « doit être uniquement en ASCII », peut-être que le contenu du champ pourrait simplement être supprimé ou assaini au lieu de générer une erreur et d’arrêter le script ?
Je vais essayer de supprimer cet utilisateur de la base de données avant de réessayer l’importation.
J’ai une autre question. Les avatars sont stockés dans la base de données et ils ont été importés avec succès.
Mais qu’en est-il des pièces jointes ? Dans mon cas, elles sont également dans la base de données, comme c’est le défaut avec vBulletin. Seront-elles importées, ou doivent-elles être stockées dans des champs séparés ?
Lors de la migration de notre ancien forum vB3, nous avons rencontré de nombreuses erreurs dans le script de migration à cause de certains caractères mojibake étranges ou de pièces jointes inhabituelles qui polluaient la base de données après 15 ans de publications.
Voici ce que j’ai fait, pas très élégant, mais cela a fonctionné pour nous :
Lorsque nous renconstrions ces erreurs, j’ai simplement modifié le script de migration à l’endroit où les erreurs se produisaient ; et j’ai entouré la ligne problématique avec :
begin
# ligne Ruby problématique ici
rescue
puts "voici des informations intéressantes sur l'erreur"
end
Mon expérience avec la migration d’environ 1 million de publications vB3 vers Discourse m’a appris que l’un de mes meilleurs alliés était :
begin
rescue
end
Nous avons perdu quelques publications malformées, mais cela ne me dérangeait pas de sacrifier une poignée de publications sur un million.
Comme je ne connais pas Rails, j’ai simplement remplacé le contenu du champ site web par une chaîne vide. C’était de toute façon un compte spam, et c’est la seule erreur sur presque la moitié des utilisateurs déjà traités.
Ce n’est donc pas un gros problème si cela n’est pas corrigé dans le code du script, même si ce serait bien que cela ne bloque pas l’importation
En ce qui concerne les pièces jointes, je vais essayer d’importer les messages de toute façon et je verrai si les pièces jointes sont importées ou non (ou s’il y a un message d’erreur quelconque) si je n’ai pas cette information d’ici là.
Nous avons également dû écrire quelques wrappers Ruby begin rescue end lorsque nous avons importé nos pièces jointes vB3 dans Discourse ; mais au final, nous avons réussi à migrer presque toutes les pièces jointes, les avatars et les images de profil.
Au début, je n’avais aucune expérience avec Ruby et Rails ; mais maintenant, je suis un grand fan de Ruby et Rails, grâce à Discourse ; et j’écris un peu de code Rails chaque jour.
Je pense qu’il est bon d’apprendre un peu lors d’une migration, si vous en avez l’envie.