Después de importar mi primer foro antiguo desde phpBB hace 3 años, me alegra haber motivado a un administrador de un foro internacional para migrar otro foro más grande (180,000 miembros, 1.6 millones de mensajes) a Discourse.
Este foro utiliza vBulletin5.
La importación funcionó bien hasta el usuario número 71712, debido a caracteres no válidos en el campo del sitio 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)
y:
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 la URL “debe ser solo ASCII”, ¿quizás el contenido del campo podría simplemente eliminarse o limpiarse en lugar de lanzar un error y detener el script?
Intentaré eliminar a este usuario de la base de datos antes de intentar importar nuevamente.
Además, tengo otra pregunta. Los avatares están almacenados en la base de datos y se importaron correctamente.
¿Pero qué pasa con los archivos adjuntos? En mi caso, también están en la base de datos, ya que así es por defecto con vBulletin. ¿Se importarán o deben almacenarse como campos separados?
Cuando migramos nuestro antiguo foro vB3, tuvimos muchos errores en el script de migración debido a algún tipo de mojibake extraño o a un archivo adjunto inusual que estaba contaminando la base de datos tras 15 años de publicaciones.
Lo que hice, no muy elegante, pero funcionó para nosotros:
Cuando nos encontrábamos con estos errores, simplemente editaba el script de migración en el punto donde ocurrían; y envolvía la línea problemática con:
begin
#línea de ruby problemática aquí
rescue
puts "aquí hay información interesante sobre el problema"
end
Mi experiencia al migrar alrededor de un millón de publicaciones de vB3 a Discourse me enseñó que uno de mis mejores aliados fue:
begin
rescue
end
Perdimos algunas publicaciones malformadas, pero para mí no fue un problema descartar un puñado de publicaciones de un millón.
Como no conozco Rails, simplemente reemplacé el contenido del campo del sitio web con una cadena vacía. De todos modos, era una cuenta de spam y este es el único error en casi la mitad de los usuarios ya procesados.
Así que no es un gran problema si no se corrige en el código del script, aunque sería agradable que no bloqueara la importación
En cuanto a los archivos adjuntos, intentaré importar los mensajes de todos modos y veré si se importan los archivos adjuntos o no (o si hay algún tipo de mensaje de error) si no obtengo esta información en el meantime.
También tuvimos que escribir algunos envoltorios de Ruby begin rescue end cuando importamos nuestros archivos adjuntos de vB3 a Discourse; pero al final, logramos migrar casi todos los archivos adjuntos, avatares e imágenes de perfil.
Cuando comenzamos, no tenía experiencia con Ruby y Rails; pero ahora soy un gran fanático de Ruby y Rails, gracias a Discourse; y escribo un poco de código de Rails todos los días ahora.
Creo que es bueno aprender un poco durante la migración, si tienes el interés.