Migrar um fórum SMF2 para Discourse

Impressionante! Mesmo que meu antigo SMF não use URLs amigáveis?

O que você quer dizer com ‘não muito’?

A suas perguntas:

  1. Sim, mas…
  2. Não exatamente significa que os links para o ID do tópico (por exemplo, index.php?topic=123) serão criados como links permanentes e funcionarão, mas âncoras para posts específicos, como index.php?topic=123.msg789#msg789, não serão mais preservadas/funcionarão. Elas são truncadas para o ID do tópico.

Abaixo, um exemplo de links permanentes do meu fórum, importados do SMF2

image

2 curtidas

pelo menos o tópico continuará sendo uma referência para posts específicos. isso é mais do que suficiente. excelente, muito obrigado pela sua resposta e também por reunir essas instruções.

1 curtida

Desculpe, esqueci de perguntar: se o meu SMF estiver configurado como categoria > fórum > fórum filho, preciso primeiro remover a categoria “fórum” para que fique apenas com duas camadas (fórum > subfórum) para converter corretamente para o Discourse?

Olá @marcozambi,

Tenho curiosidade sobre como você conseguiu fazer isso funcionar. Usei o importador em 19 de outubro para migrar um fórum grande do SMF para o Discourse, e todos os links no formato antigo foram basicamente perdidos (ou seja, recebo um erro 404 ao usar as URLs antigas).

Por exemplo, o link antigo:

identificava o seguinte tópico:

Você se importaria em compartilhar sua “magia”? :grin:

Nenhuma mágica especial.
Quando fiz a importação do SMF em setembro de 2018, o script importador do SMF2 fez toda a mágica.
Após importar cada postagem, o script criava o permalink correspondente.
De qualquer forma, fiz pequenas personalizações nos scripts, que detalhei na primeira postagem deste tópico.

1 curtida

Isso está correto. Você precisa “achatar” sua árvore de sub-fóruns SMF existente para 2 níveis.

1 curtida

Sim, e agradeço pelo seu ótimo post. Segui-o cuidadosamente e consegui migrar com sucesso um fórum com 6 milhões de postagens.

Mas talvez os permalinks tenham sido criados mesmo assim. Como você verifica isso? Se eles estiverem no banco de dados, pode ser apenas um problema do nginx que preciso corrigir.

Você pode verificar a lista de seus Permalinks indo em Admin → Personalizar → Permalinks.
A partir daí, você também pode criar novos, se necessário.

1 curtida

:+1:

Estava vazio, como eu suspeitava. Isso significa que parte do script não funcionou no nosso caso. :expressionless: Bom, ainda consigo montar alguns manualmente (acabei de tentar e consegui com o exemplo que postei acima).

Essa etapa deve conter os detalhes do banco de dados antigo do SMF2, ou deve ser exatamente ‘user’, ‘pass’, ‘db’?

Essa etapa deve conter os detalhes do banco de dados antigo do SMF2, ou exatamente como especificado; ‘db’, ‘user’ e ‘pass’?

Essa é a única etapa em que devo usar os detalhes originais do banco de dados antigo do SMF2?

Estas são as credenciais para conectar à instância do MySQL em Docker onde o dump do banco de dados do seu fórum SMF foi importado.
Para deixar claro, o MySQL em Docker está rodando no mesmo servidor onde o Discourse roda e é necessário apenas para conter o dump que você deve ter feito do banco de dados SMF.

Este é o comando que você deve executar no servidor que hospeda o banco de dados original do SMF2 para obter um dump, que então deverá ser importado na instância do MySQL em Docker mencionada acima.

1 curtida

Obrigado pela resposta.

Sim, eu já importei o banco de dados original do SMF2 para o servidor Discourse na instância MySQL containerizada.

Com as informações do MySQL containerizado em Settings.php, obtenho este erro ao executar o script de importação:

Carregando grupos existentes…

Carregando usuários existentes…

Carregando categorias existentes…

Carregando posts existentes…

Carregando tópicos existentes…

criando grupos

Rastreamento (o mais recente foi o último):

11: de script/import_scripts/smf2.rb:701:in `’

10: de script/import_scripts/smf2.rb:28:in `run’

9: de /var/www/discourse/script/import_scripts/base.rb:47:in `perform’

8: de script/import_scripts/smf2.rb:66:in `execute’

7: de script/import_scripts/smf2.rb:77:in `import_groups’

6: de script/import_scripts/smf2.rb:281:in `query’

5: de script/import_scripts/smf2.rb:287:in `__query’

4: de /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22:in `query’

3: de /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query’

2: de /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt’

1: de /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query’

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query’: A tabela ‘db.smf_membergroups’ não existe ( Mysql2::Error )

Alguma ideia?

Segui este guia linha por linha à risca várias vezes, mas continuo travando neste ponto.

Obrigado.

Verifique no seu banco de dados MySQL se a tabela smf_membergroups existe. Caso não exista, você precisará:

  1. Modificar o script para considerar um nome de tabela diferente, ou
  2. Ignorar a importação de grupos se nenhum existir.
2 curtidas

A extensão do arquivo, no final, não importa. Se o arquivo contiver instruções SQL válidas, ele será carregado independentemente.

1 curtida

Além disso, é comum que o banco de dados tenha um prefixo diferente de smf_. Muitos importadores têm essa opção, mas não verifiquei este em particular.

2 curtidas

Usar as mesmas credenciais do banco de dados SMF2 para a instância MySQL em Docker resolveu meu problema. Obrigado, pessoal!

1 curtida

@Paracelsus Parece que estou no mesmo barco; os links permanentes estão vazios. :frowning:

Meu SMF2 roda no domínio raiz, enquanto o Discourse roda em um subdomínio do domínio raiz do SMF2. Isso faz diferença?

É… os links permanentes são um saco, mas aprendi a lidar com isso. Pesquisei no Google todas as páginas da web que consegui encontrar onde havia um link para nosso fórum (no formato antigo do SMF), acessei essas páginas, peguei algum trecho de texto ou parágrafo transcrito, pesquisei por ele no fórum do Discourse e substituí pelo link permanente. Se você ainda tiver seu fórum SMF no ar, recomendo fazer isso agora, pois às vezes esses links que as pessoas colocam em suas páginas não têm nenhuma citação ou trecho de texto associado, apenas a URL, e ainda assim é possível encontrar o tópico correto.

No nosso caso, usamos nossa primeira versão em discourse.forumscp.com, mantendo forumscp.com no SMF como o “fórum de produção” por um tempo (para podermos testar coisas no Discourse e nos acostumarmos com ele). Testei o processo de atualizações incrementais algumas vezes e, algumas semanas antes, para garantir que a transição funcionasse como deveria. No dia da transição, desligamos nosso fórum antigo, fizemos a última atualização incremental do banco de dados do SMF para o Discourse e, em seguida, alteramos o domínio seguindo as instruções que eles têm em algum lugar por aqui. Também precisámos da ajuda do nosso provedor de hospedagem para verificar as configurações do nginx e não me lembro exatamente, mas havia algo relacionado ao DNS que precisávamos alterar. No entanto, seguimos simplesmente as instruções do nosso provedor e tudo correu bem.

Você pode procurar outro importador que faça links permanentes e copiar o código. vBulletin e phpBB provavelmente são bons exemplos.