Consegui importar meu fórum vBulletin 5 para o Discourse. Embora o script de importação geral funcione bem, estou encontrando erros ao importar anexos. Os anexos são armazenados em meu banco de dados e incluem as seguintes extensões: java, html, jpg, png, txt, rtf, zip, js e xml.
Ao depurar a ação import_attachment, descobri que apenas anexos com a extensão java estão sendo importados corretamente. O script falha para anexos com outras extensões.
Mais alguém na comunidade enfrentou problemas ao importar anexos com essas extensões de arquivo? Alguém tem insights sobre por que o script pode estar falhando com esses tipos de arquivo específicos?
Aqui está uma breve visão geral do problema:
Os três primeiros arquivos em meu banco de dados têm a extensão java e são importados sem problemas.
O script falha quando encontra um arquivo com a extensão jpg.
begin
upl_obj = create_upload(post.user.id, filename, real_filename)
if upl_obj&.persisted?
html = html_for_upload(upl_obj, real_filename)
if !post.raw[html]
post.raw += "\n\n#{html}\n\n"
post.save!
UploadReference.ensure_exist!(upload_ids: [upl_obj.id], target: post)
end
else
puts "Falha ao criar upload para #{filename}: #{upl_obj.errors.full_messages.join(", ")}"
next
end
rescue => e
puts "Erro ao processar arquivo #{filename}: #{e.message}"
next
end
Minha suposição, que pode estar errada, é que um problema com a codificação de nova linha torna os dados nos arquivos binários incorretos porque um caractere de nova linha é codificado como dados. Se os únicos arquivos que funcionam são ASCII, é uma boa aposta.
Portanto, não é um problema do Discourse, mas um problema do MySQL.
Quase - não codificação de nova linha, mas tratado como texto e, portanto, corrompido.
EF BF BD é a sequência de bytes UTF-8 para ‘CARACTERE DE SUBSTITUIÇÃO’ (U+FFFD). Isso é indicativo de um arquivo sendo tratado como texto em vez de binário.
Uma imagem JPEG começa com ff d8 ff e0 xx xx 4a 46 49 46 00
Você pode ver que os quatro primeiros bytes foram substituídos por EF BF BD.
Portanto, suas imagens estão realmente corrompidas. Este não é um problema com o importador, é um problema com o banco de dados, como @pfaffman já disse. Se você copiou este banco de dados de outro servidor, pode querer verificar se isso já é um problema no banco de dados original. Isso também pode estar acontecendo apenas com as imagens mais antigas (se isso aconteceu há muito tempo). Apenas remova o exitlinha e veja o que acontece.
@RGJ Obrigado pela ajuda. Tentei importar um novo banco de dados com as imagens corretas e, embora tenha sido importado, nem todos os anexos foram totalmente importados. Estou encontrando erros como este:
Se bem me lembro, todas as tags [ATTACH] são removidas das postagens, pois são supérfluas. Isso provavelmente não funciona aqui porque ele não espera dados JSON. Seria uma questão de procurar o local onde eles estão sendo removidos e modificar esse código para levar em conta os dados JSON dentro da tag.
Antes de importar anexos, noto que posts com imagens contêm tags [ATTACH]. Após a importação, algumas dessas tags são preenchidas corretamente, enquanto outras ficam vazias. Por quê?
Acho que alguns anexos do vBulletin os adicionam ao banco de dados e alguns incluem bbcode como esse. Acho que já modifiquei a importação para lidar com eles antes.
Ah, eu não tinha notado o JSON antes. Você espera que esses arquivos JSON sejam anexos incorporados às postagens? Como são essas postagens no vBulletin?
Acredito que os outros erros ocorram porque essas postagens não foram importadas por algum motivo (como o tópico pai ter sido excluído ou não ter sido importado).
Eu não acho que estes sejam arquivos json, são metadados json.
Parece que o vBulletin mudou a codificação de locais de anexo de
[attach]123[/attach]
para
[attach=json]{\"data-attachmentid\":123}[/attach]
e o importador não consegue lidar com isso. Ele deve anexar os anexos de qualquer maneira, essas tags são apenas para posicioná-los dentro da postagem. Mas a exclusão da tag só acontece quando elas contêm um ID numérico.
Muitos outros erros na captura de tela acima são independentes deste problema.
Pensei ter visto que às vezes o banco de dados os vinculava à postagem e às vezes o bbcode fazia, e acho que às vezes ambos fazem? E às vezes eles vivem no banco de dados e às vezes são arquivos externos (mas posso estar me lembrando de algum outro sistema quanto a isso).