Migrar um fórum vBulletin 4 para Discourse

I know this is a bit of an old topic, but I’ve just completed a comparably sized vb4 migration and am missing a LOT of image attachments, somewhere on the order of 75% of them I’d wager. They are not tombstoned, and all the threads have been rebaked.

Has anyone else dealt with this? How should I go about recovering those images?

Did you see errors when you did the import?

1 curtida

Yes, quite a few ‘Attachment file doesn’t exist’ errors with some ‘Couldn’t find attachment record for post.id=xxx, import_id=xxx’ sprinkled in.

The thing that has me scratching my head is that these are posts that I know have intact attachments, and that those attachments are in the ATTACHMENT_DIR global directory. The threads with missing images are missing ALL the associated images, which seems… not random.

I’m at a loss to find any common factor among the threads/posts with lost images either.

Those messages were your clue that something was amiss. All you can do is diagnose the problem an run the import again.

Every import is a snowflake. I’ve don’t dozens of them. It’s rare that one just works. If you’d like help: Redirecting…

2 curtidas

Queria experimentar o Discourse convertendo nossa extensa base de dados do VBulletin, então decidi tentar este script.

Ele importou usuários e grupos, mas falhou algumas vezes ao processar subcategorias.

   importando categorias de nível superior...
        7 / 7 (100.0%)  [902 itens/min]   n]
importando categorias filhas...
Traceback (última chamada do erro):
        5: from script/import_scripts/vbulletin.rb:942:in `<main>'
        4: from /home/peterb/discourse/script/import_scripts/base.rb:47:in `perform'
        3: from script/import_scripts/vbulletin.rb:84:in `execute'
        2: from script/import_scripts/vbulletin.rb:287:in `import_categories'
        1: from script/import_scripts/vbulletin.rb:287:in `each'
script/import_scripts/vbulletin.rb:289:in `block in import_categories': undefined method `[]' for nil:NilClass (NoMethodError)

Verifiquei várias coisas, como codificação UTF8, recursos do servidor etc., mas agora estou um pouco perdido sobre o que mais checar.
Alguma ideia?
Obrigado.

Estou executando uma importação do vBulletin com 8 milhões de posts agora mesmo. Adicionei suporte a curtidas (aparentemente algum plugin ou modificação) e enquetes.

Não consigo identificar exatamente qual é o problema a partir do erro. Minha suposição é que ele não está encontrando algum parentid.

Acho que você precisa de alguma forma corrigir

    parent_category_id: category_id_from_imported_category_id(category["parentid"])

para que não falhe se category['parentid'] for nil.

1 curtida

Obrigado. Analisei novamente e parece que os administradores criaram “seções” de categorias definindo o ID do pai como -1… que não existe.

3 curtidas

É. Parece que você descobriu. Coisas assim dando errado são muito mais a regra do que a exceção. Depois, você precisa decidir se corrige no banco de dados ou ajusta o código para lidar com o banco de dados quebrado.

3 curtidas

É o usual em qualquer migração de dados: qualquer script que você encontrar nunca cobrirá todas as eventualidades. Não ajuda que o único momento em que tenho tempo livre para trabalhar nisso seja tarde da noite (é um favor para o meu clube de carros). O site vBulletin é bastante personalizado, então vou ver que outras surpresas aparecerem.

4 curtidas

Entendo que existe um script capaz de importar dados do vBulletin 4, mas não vejo nada sobre a redireção de todas as URLs para o novo formato de URL do Discourse.

Como vocês lidam com isso? O que acontece com todos os links externos que seus fóruns possuem?

Aqui está:

3 curtidas

Obrigado @RGJ, mas você pode explicar como isso funciona na prática? O que exatamente este script está fazendo? Ele cria algum tipo de URLs de alias (no Discourse) para as URLs atuais/corretas importadas no Discourse?

Como você recomendaria migrar um domínio antigo do Vbulletin (www.example1.com) para um novo domínio no Discourse (www.exmple2.com)?

Acho que, de alguma forma, o ideal seria que o domínio do fórum antigo redirecionasse todo o tráfego/links de entrada para o novo domínio com base em uma lista de redirecionamentos 301. Como você recomendaria criar essa lista de redirecionamentos?

Você não precisa alterar os domínios, mas se fizer isso, o processo será em duas etapas.

  1. redirecione TUDO do domínio antigo para o novo
  2. os links permanentes do Discourse traduzirão as URLs no estilo vBulletin para os tópicos corretos do Discourse.

Se você não alterar os domínios e apenas apontar para a nova configuração do Discourse, então você só precisará fazer a etapa #2.

1 curtida

Como funcionam os cabeçalhos de redirecionamento HTTP do Discourse, 301 ou 302?

Estou interessado na perspectiva de SEO: uma mudança de domínio afetará os rankings?

301 Redirecionado Permanentemente

A palavra permalink diz tudo :slight_smile:

1 curtida

Você pode ver por si mesmo se visitar /admin/customize/permalinks e criar um permalink para ver como funciona.

Tenho um problema com anexos que não são importados completamente, algo semelhante ao que já foi mencionado antes, mas o script não está gerando nenhum erro.
O banco de dados é pequeno (71M) e a importação completa termina em 0min 23s.


A maioria dos anexos está faltando nas postagens.
Executei as consultas SQL diretamente no meu banco de dados vb4, exatamente como estão no script, e elas estão retornando os dados corretos, então no momento não sei onde está o problema…

Os anexos ausentes não estão vinculados diretamente nas postagens? Acredito que o script puxa apenas as imagens mencionadas nas postagens, e não aquelas que estão meramente anexadas à postagem.

Tenho um script que importa esses arquivos, mas ainda não consegui enviar um PR.

Sim, acho que você está certo, @pfaffman, esse é realmente o caso.
Ficarei aguardando esse script quando você o fizer o upload!

Se você tiver um orçamento, me avise. Pretendo enviar uma versão depois de terminar essa importação, mas preciso remover uma quantidade considerável de código que é apenas para essa importação, e é por isso que isso não aconteceu há um ano…

1 curtida