Concluímos com sucesso a migração de nossa comunidade (techenclave.com) do XenForo para o Discourse.
Total de Posts: 2,5 milhões
Total de Usuários: 79 mil (ativos e banidos)
Total de Mensagens Privadas: 0,7 milhão
É uma comunidade com 20 anos, então já passou por várias migrações, de Proboards, Vbulletin, IPB, Xenforo e agora Discourse.
Levamos 4 dias para concluir a migração. Mas houve 4 semanas de pré-trabalho de migração e 4 semanas de desenvolvimento de plugins personalizados antes disso.
Obrigado a todos por ajudarem e orientarem onde ficamos presos. ![]()
No geral, foi uma migração extremamente bem-sucedida, com quase nenhum dado útil deixado para trás.
O núcleo de nossa migração foi construído sobre um script de importação XenForo aprimorado, melhorando significativamente uma base padrão. Também utilizamos vários scripts de suporte especializados para lidar com transformações de dados específicas e garantir a integridade dos dados após a importação.
Principais Aprimoramentos no Script Principal de Importação XenForo
Otimização de Desempenho (Paginação Keyset): A melhoria mais crítica é a adoção da paginação keyset (WHERE id > last_id). Este método melhora drasticamente a velocidade de processamento em lote em comparação com as consultas OFFSET tradicionais, especialmente em grandes conjuntos de dados, usando chaves primárias indexadas para buscar o próximo conjunto de registros.
Checkpointing e Retomada Robustos: Lógica avançada de checkpointing (usando arquivos .json) foi implementada para usuários, tópicos, respostas e mensagens privadas. Isso permite que o processo de importação seja retomado com segurança a partir do último registro importado com sucesso após interrupções (por exemplo, reinícios do servidor, erros de script), economizando tempo significativo.
Estratégia de Importação de Posts em Duas Passagens: Os posts agora são importados em duas passagens distintas:
Tópicos Primeiro: Todas as threads originais do XenForo (primeiros posts) são importadas, garantindo que os tópicos pai existam antes das respostas.
Respostas Segundo: Posts subsequentes dentro das threads são então importados, vinculando-os corretamente aos seus tópicos Discourse recém-criados. Essa abordagem estruturada minimiza respostas órfãs e aprimora a consistência dos dados.
Importação Abrangente de Reações/Curtidas:
O script agora diferencia inteligentemente entre as reações do XenForo que se mapeiam diretamente para as "Curtidas" principais do Discourse (corações) e aquelas que são reações personalizadas.
Ele suporta a inserção em massa de curtidas principais (na tabela post_actions) e reações personalizadas (utilizando o plugin discourse-reactions), acelerando significativamente o processo.
Inclui um mapeamento de nomes curtos de emoji do XenForo para equivalentes do Discourse (por exemplo, thumbsup para +1, heart_eyes para heart).
Importação Enriquecida de Dados do Marketplace (Plugin Personalizado):
Uma seção dedicada foi adicionada para importar dados detalhados de listagens do marketplace (por exemplo, preço, localização, condição, garantia, opções de pagamento) da tabela thread_field_value do XenForo.
Esses dados são armazenados em um modelo personalizado TecencMarket::Listing e como campos personalizados de tópico, permitindo uma exibição e funcionalidade mais ricas no Discourse.
Importação de Feedback do Marketplace (Plugin Personalizado):
Uma nova função foi introduzida para migrar feedback/avaliações de usuários (curtidas/descurtidas) associados a transações de marketplace.
Conversão de Prefixo de Thread para Tag: O script agora converte automaticamente os prefixos de thread do XenForo em tags do Discourse. Isso é crucial para manter a organização e a descoberta do conteúdo, usando o plugin discourse-tagging. Ele também mapeia corretamente os IDs de prefixo para títulos legíveis usando a tabela phrase do XenForo.
Processamento Aprimorado de Conteúdo de Post: Este método recebeu atualizações significativas para melhor conversão de Markdown e manipulação do complexo BBCode do XenForo:
Manipulação Aprimorada de Citações: Conversão das tags [QUOTE] do XenForo, incluindo a manipulação de usuários citados e o link para posts/tópicos específicos do Discourse quando possível.
Incorporações de Mídia Corrigidas: Garante que todas as mídias importadas (YouTube, Twitter/X) estejam em suas linhas separadas para habilitar o recurso de oneboxing/incorporação do Discourse, e converte tags antigas de BBCode [MEDIA] para URLs padrão.
Conversão de Tabela: Converte o BBCode [TABLE] do XenForo em tabelas Markdown.
Manipulação de Anexos (Em Linha e Anexados): A lógica de processamento de anexos foi refatorada. Agora, ela tenta substituir as tags [ATTACH] pelo Markdown correto para o arquivo carregado. Crucialmente, quaisquer anexos que não foram explicitamente marcados com [ATTACH] no conteúdo do post agora são anexados ao final do post sob um cabeçalho claro "Anexos:", garantindo que nenhum arquivo seja perdido.
Conversão de Emoji/Smiley: Mapeamento expandido de smileys do XenForo para emojis nativos do Discourse, melhorando a consistência visual.
Limpeza Geral de BBCode: Remoção e conversão mais abrangentes de várias tags de BBCode (por exemplo, [B], [I], [URL], [IMG], [LIST], [CODE], [COLOR], [FONT], [SIZE], [INDENT], [USER]).
Codificação de Caracteres e Limpeza: Inclui .scrub! para sequências UTF-8 inválidas e CGI.unescapeHTML para decodificação adequada de entidades HTML.
Manipulação de Usuários Suspensos: Usuários banidos do XenForo agora são importados como usuários suspensos do Discourse, mantendo suas contas, mas limitando sua atividade, com os motivos do banimento preservados em campos personalizados.
Importação de Favoritos: Importa todos os favoritos do XenForo para o Discourse. Não havia muitos para começar.
Uma grande parte dos usuários não ficou feliz após a migração. O que é esperado. Não é algo que vocês não tenham ouvido antes após uma migração. No entanto, compartilharei um resumo do feedback mais tarde neste tópico, pode haver algo para refletir e alimentar o futuro do discourse.

