Depois de importar meu primeiro fórum antigo do phpBB há 3 anos, estou feliz por ter motivado um administrador de fórum comunitário internacional a migrar outro fórum, ainda maior (180.000 membros, 1,6 milhão de mensagens), para o Discourse.
Este fórum usa o vBulletin5.
A importação funcionou bem até o usuário de número 71712, devido a caracteres inválidos no campo do site:
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 a URL “deve conter apenas ASCII”, talvez o conteúdo do campo pudesse ser simplesmente removido ou sanitizado, em vez de gerar um erro e interromper o script?
Vou tentar remover este usuário do banco de dados antes de tentar importar novamente.
Além disso, tenho outra pergunta. Os avatares estão armazenados no banco de dados e foram importados com sucesso.
Mas e os anexos? No meu caso, eles também estão no banco de dados, pois é o padrão do vBulletin. Eles serão importados ou precisam ser armazenados como campos separados?
Quando migramos nosso antigo fórum vB3, tivemos muitos erros no script de migração devido a algum estranho mojibake ou a um anexo peculiar que estava poluindo o banco de dados após 15 anos de posts.
O que fiz, não foi muito elegante, mas funcionou para nós:
Quando nos deparamos com esses erros, simplesmente editei o script de migração onde os erros ocorriam e envolvi a linha problemática com:
begin
#linha ruby problemática aqui
rescue
puts "aqui está alguma informação interessante sobre o problema"
end
Minha experiência ao migrar cerca de 1 milhão de posts do vB3 para o Discourse foi que um dos meus melhores amigos foi:
begin
rescue
end
Perdemos alguns posts malformados, mas para mim não foi problema descartar um punhado de posts entre um milhão.
Como não conheço Rails, substituí o conteúdo do campo do site por uma string vazia. Era uma conta de spam de qualquer forma, e é o único erro em quase metade dos usuários já processados.
Então, não é um grande problema se não for corrigido no código do script, embora seria bom que não bloqueasse a importação
Quanto aos anexos, vou tentar importar as mensagens de qualquer maneira e verificarei se os anexos são importados ou não (ou se houver algum tipo de mensagem de erro), caso não receba essa informação no meio do caminho.
Nós também tivemos que escrever alguns wrappers em Ruby begin rescue end quando importamos nossos anexos do vB3 para o Discourse; mas, no final, conseguimos migrar quase todos os anexos, avatares e imagens de perfil.
Quando começamos, eu não tinha experiência com Ruby e Rails; mas agora sou um grande fã de Ruby e Rails, graças ao Discourse; e escrevo um pouco de código Rails todos os dias.
Acho que é bom aprender um pouco durante a migração, se você tiver interesse.