Migrado de XenForo para Discourse: Visão Geral da Migração

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. :folded_hands:
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.

17 curtidas

Obrigado por compartilhar! Muitas coisas na lista que identifiquei como itens de ação para um projeto contínuo de migração do SMF para o Discourse :slightly_smiling_face:

O seu código de importação personalizado está disponível ao público? Eu estaria especialmente interessado em como você lidou com a importação de duas passagens para garantir links novos e corretos.

2 curtidas

Você pode consultar os scripts de importação que usei. O arquivo que você quer ver é este:
xenforo_import_enhanced.rb

7 curtidas

O motivo pelo qual tivemos que fazer duas passagens foi porque, com o tempo, invariavelmente um tópico antigo seria mesclado a um novo tópico. Mas as postagens teriam o ID antigo e seriam captadas primeiro. Sem um tópico correspondente importado até então, todas essas postagens seriam descartadas e perdidas.

4 curtidas

Muito obrigado! Vou dar uma olhada.

Além disso, aprecio o comentário adicional sobre o raciocínio por trás disso. Esse é um problema que, felizmente, não encontramos. O principal motivo pelo qual eu estava pensando em uma importação de duas passagens é que os hiperlinks nas citações ainda têm a URL antiga - e, embora os permalinks também devam funcionar, acho que seria melhor usar a nova URL para as postagens imediatamente.

1 curtida

Uau! Parabéns! E obrigado por compartilhar.

É esperado, sim. A forma como você lida com o feedback deles agora é crucial. Aborde os comentários, certifique-se de que eles se sintam ouvidos e destaque as melhorias e novos recursos (tenho certeza de que há muitos!). Se tiver algum problema com o feedback, poste aqui, e ficarei feliz em ajudar.

Dê uma olhada na última seção deste artigo, ele lhe dará algumas dicas: How to prepare your community for a Discourse migration

9 curtidas

Após quatro tentativas frustradas com o importador padrão, sua versão funcionou perfeitamente.

4 curtidas

Compartilhando este resumo conforme prometido. Usei o Gemini 2.5 Pro para resumir todo o feedback coletado nos últimos 3 meses.

Eu diria que a maior preocupação tem sido um bom tema. Gostaria que houvesse um marketplace de temas pagos no Discourse, como em outras plataformas de fórum.


Resumo

O feedback sobre a migração para o Discourse é fortemente dividido, mas a maioria dos usuários vocais expressa frustração significativa, levando à redução do engajamento. As questões mais críticas estão centradas em Navegação e Usabilidade e UI e Design, particularmente para usuários de desktop acostumados com layouts de fórum tradicionais. Embora alguns usuários apreciem o visual moderno e as melhorias técnicas, o consenso entre os críticos é que a plataforma prioriza a forma sobre a função, criando uma alta carga cognitiva e uma experiência menos intuitiva.


1. Navegação e Usabilidade (Prioridade Máxima)

Esta categoria recebeu o feedback negativo mais frequente e detalhado. Os usuários acham a nova plataforma fundamentalmente mais difícil de usar, o que é uma causa direta de sua redução de engajamento.

  • Pontos-chave de Feedback e Ponderação:

    • Infinite Scroll é Impopular: O ponto de maior consenso é a antipatia pelo scroll infinito, especialmente no desktop. Os usuários sentem falta do contexto e do controle dos números de página para navegar por threads longos.
    • Geralmente Difícil de Navegar: Um número significativo de usuários descreve a plataforma como confusa, desordenada, tediosa e com uma curva de aprendizado acentuada na qual não desejam investir para um fórum.
    • Dificuldade em Encontrar Posts Recentes/Não Lidos: Uma luta comum é a incapacidade de pular intuitivamente para o último post ou retomar a leitura de um ponto específico em um thread, exigindo que os usuários aprendam soluções alternativas não óbvias.
    • Má Descoberta de Conteúdo: Os usuários sentem falta da antiga página de categorias, que fornecia uma visão geral clara e hierárquica da estrutura do fórum e da atividade mais recente dentro das seções. O novo layout é visto como um “mishmash”.
    • Citação Quebrada: O processo de citar texto é descrito como difícil e instável, especialmente em dispositivos móveis e tablets, onde a janela pop-up de citação pode ser obscurecida pela UI nativa.
  • Insights Acionáveis:

    • Priorizar uma Experiência de “Fórum Tradicional”: A questão central é o desvio do modelo de fórum esperado. Um tema ou layout que emule uma visualização paginada e mais estruturada, especialmente para a página de categorias, abordaria as reclamações mais significativas.
    • Melhorar Indicadores de Navegação: Tornar o salto para o primeiro, último e último post não lido uma ação óbvia de um clique. A funcionalidade atual da barra de rolagem não é intuitiva para muitos. Considere adicionar botões explícitos no topo e na parte inferior dos threads.
    • Reavaliar o Comportamento Padrão de Citação: A necessidade de selecionar manualmente o texto para citar é um grande ponto de atrito. Investigue plugins ou configurações que tornem a citação de um post completo a ação padrão de um clique.

2. UI e Design (Prioridade Alta)

Os usuários sentem que o design atual desperdiça espaço e prejudica a legibilidade, impactando diretamente sua capacidade e desejo de consumir conteúdo.

  • Pontos-chave de Feedback e Ponderação:

    • Excesso de Espaço em Branco: Esta foi a falha de design mais citada. Usuários com monitores de desktop maiores sentem que a coluna central estreita desperdiça espaço de tela significativo e reduz a densidade de informações.
    • Desejo de Personalização: Os usuários estão buscando ativamente maneiras de melhorar sua experiência por meio de CSS personalizado, temas diferentes (Default sobre Horizon) e tamanhos de fonte menores. Isso indica um forte desejo por mais controle em nível de usuário sobre a aparência.
    • Má Legibilidade: A combinação de espaço em branco, tamanhos de fonte e falta de separação clara entre os posts torna mais difícil escanear e ler o conteúdo em comparação com o software anterior.
  • Insights Acionáveis:

    • Desenvolver um Tema “Compacto” ou “Tela Cheia”: Aborde diretamente a reclamação sobre espaço em branco, oferecendo um tema oficial que utilize mais a largura da tela. Isso também atenderia ao desejo de personalização e é a solução alternativa mais comum que os usuários estão implementando por conta própria.
    • Refinar Separadores Visuais: Aumente a distinção visual entre os posts. Mudanças sutis como bordas, cores de fundo alternadas ou layouts diferentes de blocos de informações do usuário podem melhorar significativamente a legibilidade e reduzir a sensação de “bate-papo”.
    • Revisar Tamanho da Fonte e Hierarquia: Realize uma revisão da tipografia do tema para garantir uma hierarquia mais consistente e densa em informações, particularmente para o texto de subcategorias e o conteúdo dos posts.

3. Sentimento Geral e Engajamento do Usuário (Alto Impacto)

Uma parte significativa do feedback indica um impacto negativo direto na atividade do usuário. Embora parte disso seja resistência à mudança, a consistência das reclamações sugere problemas mais profundos.

  • Pontos-chave de Feedback e Ponderação:

    • Sentimento Negativo / Uso Diminuído: Esta é uma métrica crítica. Vários usuários afirmam explicitamente que visitam o fórum com menos frequência agora.
    • Sentimento Positivo: Um grupo menor, mas notável, gosta da sensação moderna, da velocidade e de recursos como o sistema de notificações e o editor markdown.
    • Usuários Adaptáveis: Este grupo sente falta do antigo fórum, mas entende as razões técnicas para a migração e está disposto a se adaptar.
  • Insights Acionáveis:

    • Reconhecer e Comunicar: Reconheça publicamente o feedback dos usuários e comunique um roteiro claro para melhorias de UI/UX. Isso pode ajudar a reter usuários que estão atualmente frustrados, mas dispostos a se adaptar.
    • Priorizar Correções de “Qualidade de Vida”: Concentre-se primeiro em mudanças de baixo esforço e alto impacto (por exemplo, alterar as cores das categorias para corresponder ao tema antigo, conforme sugerido por um usuário) para mostrar que o feedback está sendo ouvido e acionado.
    • Criar um Guia de “Primeiros Passos”: Embora alguns usuários resistam a ler guias, um tópico fixado que explique rapidamente as 5 principais mudanças mais confusas (como navegar por threads e citar) pode facilitar a transição para muitos.

4. Funcionalidade Principal e Desempenho (Prioridade Média)

Embora não sejam mencionados com tanta frequência quanto UI/UX, esses problemas afetam o propósito central do fórum.

  • Pontos-chave de Feedback e Ponderação:

    • Sensação de Chat: O design incentiva respostas curtas e reativas em vez de discussões longas e estruturadas, fazendo com que pareça mais um aplicativo de bate-papo do que um fórum.
    • Busca Ruim: Os usuários relatam que a busca não prioriza efetivamente os resultados dos títulos dos tópicos, dificultando a localização de threads conhecidos.
    • Problemas de Desempenho: Um usuário observou que o editor de texto fica lento e faz com que seu laptop aqueça em threads longos.
  • Insights Acionáveis:

    • Ajustar Relevância da Busca: Investigue as configurações ou plugins do Discourse que podem dar mais peso aos títulos dos tópicos nos resultados da busca. A sugestão do administrador de usar sintaxe avançada é uma solução alternativa, não uma solução para o comportamento padrão da busca.
    • Monitorar Desempenho em Threads Longos: Fique atento ao desempenho do editor e da rolagem em threads com milhares de respostas para resolver possíveis gargalos do lado do cliente.
    • Habilitar Busca por IA: Conforme sugerido pelo administrador, habilitar a busca por IA pode ser uma solução de longo prazo para o problema de relevância da busca, mas deve ser ponderada contra os custos potenciais.
3 curtidas

Por que não Marketplace? Embora o resultado seja geralmente privado.

Para esses usuários, você pode considerar destacar explicitamente a visão geral das categorias. Ou até mesmo considerar a substituição dessa visão geral por algo que eles prefiram. É uma oportunidade para envolvê-los também.
Compartilhe algumas capturas de tela de como ficariam as diferentes configurações de Estilo da página de categoria do desktop e pergunte qual é a favorita deles?

Este parece ser um feedback que gostaríamos de obter explicitamente. Você poderia pedir a eles para relatarem isso aqui no Meta?

Isso pode ser corrigido com temas de usuário :slight_smile: Considere adicionar este componente de tema a um tema selecionável pelo usuário GitHub - discourse/discourse-full-width-component: Make Discourse occupy the full browser width

Eu não entendo “separação clara entre as postagens”?

A mudança é sempre difícil, as pessoas sempre reclamarão. Se o grupo “negativo” for pequeno o suficiente, acho que você pode ignorá-los com segurança por enquanto e focar nos adaptáveis. Torne a experiência deles ótima e as pessoas negativas seguirão o exemplo (ou irão embora).

2 curtidas

Com um marketplace de temas, o custo é dividido entre vários compradores. O criador do tema também tem incentivo para criar muitos temas.

1 curtida

O componente não oferece realmente largura total. Ele agrupa o layout à esquerda, mas não o expande. Implementei um tema personalizado que se expande, mas gostaria que fosse possível para todos os temas.

Com componente de largura total no Horizon

Com o tema personalizado baseado no Foundation

Você está certo, porém, a mudança é difícil e muitos usuários se adaptaram, alguns ainda estão achando difícil. É difícil satisfazer a todos. Apenas pensei em compartilhar toda a experiência.

Compartilharei mais detalhes sobre o problema da citação em dispositivos móveis/tablets.

2 curtidas