Migrando banco de dados do vBulletin 5 - Erros na importação de anexos sobre extensões de anexos

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.

@pfaffman Qualquer conselho ou solução seria muito apreciado!

Você precisará adicionar algumas instruções put de depuração para ver o que está acontecendo.

Adicionei uma instrução de depuração em upl_obj

     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

e vi estes erros

estes erros são nas extensões jpg, jpeg, png, PNG, gif

alguma ideia sobre estes erros? @pfaffman

Os únicos arquivos que funcionaram foram os ASCII. Minha suposição é um erro de codificação.

Há um problema com os arquivos no banco de dados ou um problema de codificação no script de importação? @pfaffman


Veja estes arquivos se outros estiverem codificados, então por que essas extensões, por exemplo, jpg, png, etc., não estão?

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.

1 curtida

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 exit linha e veja o que acontece.

1 curtida

@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:

Alguma ideia do porquê isso está acontecendo? @RGJ @pfaffman

As postagens estão aparecendo assim, e há muitos casos:

Não acho que o importador consiga lidar com isso.

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ê?

Como eu disse, essas tags são supérfluas, mas a lógica de remoção de tags não espera esse código JSON, então ela não as está removendo corretamente.

Nenhuma dessas imagens está aparecendo, certo?

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.

Sim, estes não estão sendo exibidos.
Recebi erros em 1 mil anexos de 12,5 mil.
Como posso fazer o upload deles?

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.

1 curtida

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).

Sim, isso está quase correto. Mas, até onde sei, no vBulletin 5 é sempre via banco de dados.

1 curtida