Migrar um fórum phpBB3 para Discourse

Isso é tudo bastante típico.

Acho que as alterações que você sugere provavelmente não quebrarão nenhuma outra importação. Muitas vezes, há um conjunto de alterações como essas e, em seguida, um monte de outras alterações que são específicas para a importação e descobrir quais são quais e testar novamente apenas com elas seria muito trabalho, então um PR não é criado.

Fico feliz que você tenha conseguido!

3 curtidas

Obrigado Constanza, link muito útil. :+1:


Obrigado pela informação Jay. Farei o PR mais tarde, depois de terminar a migração, se puder ajudar a ter uma ferramenta de migração phpBB3 ainda melhor.

O script atual também ignora tags [size=XXX que encontrei durante outras migrações.
Na minha migração atual, fiz um script rápido no meu importador e usei o valor de XXX para substituir essas tags por \u003csmall\u003econteúdo\u003c/small\u003e e \u003cbig\u003econteúdo\u003c/big\u003e, pois são suportadas pelo Discourse.
Mas isso foi um desejo pessoal e pode ser uma solução mais adequada (em geral) simplesmente remover essas tags [size, como o script de importação já faz com as tags [color].

4 curtidas

Obrigado @Canapin por todo o seu feedback. Uma PR é definitivamente bem-vinda!

Além disso, uma pequena prévia: Estamos trabalhando em uma solução que deve tornar todas as importações – não apenas phpBB – muito melhores, mais rápidas, mais fáceis de personalizar e se livrar daqueles problemas irritantes com a conversão de BBCode… :wink:

4 curtidas

Ao importar minhas postagens, recebi vários desses erros (não para todas as postagens):

   251491 / 251672 ( 99.9%)  [14140 itens/min]  Exceção ao criar postagem 354629. Pulando.
undefined method `[]' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:66:in `block in map_first_post'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `try'
/var/www/discourse/script/import_scripts/base.rb:576:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:523:in `block in create_posts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:510:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:192:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:873:in `loop'
/var/www/discourse/script/import_scripts/base.rb:873:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:254:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:188:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:38:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'

Mas não consegui descobrir o que causa isso.

Alguma pista?

Como posso verificar se realmente tenho postagens faltando? Não consegui encontrar como exibir os dados (conteúdo da postagem, por exemplo) correspondentes a “Exceção ao criar postagem 354629”.

Não me lembro de ter tido esse erro em outros testes de importação nos dias anteriores, mas talvez eu apenas não tenha prestado atenção… Poderia estar relacionado a este problema conhecido?

251490 / 251672 ( 99.9%)  [14140 itens/min]  Postagem pai 337703 não existe. Pulando 354628: vw-camper est malade !?

Executei o script de importação duas vezes, como deveria, em relação a este problema específico.

1 curtida

Certifique-se de que tag_mappings: {} esteja definido em seu arquivo settings.yml se você não estiver usando este recurso.

3 curtidas

Sinto-me burro! Até pensei nisso, mas tinha tanta certeza de que não tinha encontrado esse erro antes que não tentei… :facepalm:

Isso resolveu o problema, muito obrigado.


Suponho que você não possa dizer muito neste momento, mas alguma pista sobre como funcionará e quando alguns scripts de importação utilizáveis poderão ser usados ​​com essa nova coisa?
Eu posso migrar outro phpBB este ano, então isso pode ser muito interessante para mim saber um pouco mais. :slight_smile:

1 curtida

Olá, estou testando a migração do phpbb 3.2 para o Discourse para um fórum de tamanho considerável (30 mil tópicos / 600 mil posts) e quase tudo funciona bem, exceto por alguns tópicos não importados (“Postagem pai xx não existe”), não resolvidos com múltiplas execuções, mas não é um problema.
Meu principal problema é que importações subsequentes com dados novos (verificados com o sha256sum no arquivo import/mysql/imported) não importam posts novos no Discourse. Estou enfrentando uma exceção logo no início do processo, não sei se está ligada:

Falha ao mapear postagem com ID 6815

Valor BIGINT UNSIGNED está fora do intervalo em '(`phpbb_prod`.`o`.`poll_option_total` - (select count(distinct `phpbb_prod`.`v`.`vote_user_id`) from `phpbb_prod`.`phpbb3_poll_votes` `v` join `phpbb_prod`.`phpbb3_users` `u` join `phpbb_prod`.`phpbb3_topics` `t` where ((`phpbb_prod`.`u`.`user_id` = `phpbb_prod`.`v`.`vote_user_id`) and (`phpbb_prod`.`v`.`topic_id` = `phpbb_prod`.`t`.`topic_id`) and (`phpbb_prod`.`v`.`poll_option_id` = `phpbb_prod`.`o`.`poll_option_id`) and (`phpbb_prod`.`t`.`topic_id` = `phpbb_prod

Isso é um problema com enquetes incorporadas em posts, a partir do SQL exibido?

Tenha um bom dia!

2 curtidas

Ainda não posso dizer muito, pois ainda está em desenvolvimento. Os planos podem mudar… Mas “este ano” é uma boa aposta. :wink:

2 curtidas

valor BIGINT UNSIGNED está fora do intervalo

Hmm, existem tantos votos anônimos nesta enquete?

Você precisará mexer neste SQL:
discourse/script/import_scripts/phpbb3/database/database_3_0.rb at f82f0e11798fea1130c91a3958a26dd52453e3f7 · discourse/discourse · GitHub

Algo como isto, talvez? https://stackoverflow.com/a/11704174/451338
Por favor, me avise quando encontrar uma solução ou criar um PR com uma correção. Agradeceria.

3 curtidas

Enquetes são desde o início do fórum, eu não estava no comando nesta época, mas acho que usuários anônimos nunca foram permitidos a postar/responder enquetes

Com

 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

Consigo consultar todos os votos de enquetes, e para 2 delas, tenho “anonymous_votes” negativos. Parece que este fórum permitiu de alguma forma a votação anônima, na verdade :slight_smile:

Obrigado @gerhard pela dica, vou investigar mais a fundo…

4 curtidas

Estou atualmente pesquisando a migração de um fórum phpBB para Discourse. O problema é que nosso phpBB está usando Postgres em vez de MySQL, então eu gostaria de adaptar o script para funcionar com ele também.

Alguém poderia me dar algumas dicas sobre a melhor maneira de fazer isso? Como, idealmente, eu gostaria que todos se beneficiassem desse trabalho, então gostaria que ele usasse uma abordagem aceita pelo upstream em vez de apenas um hack rápido e sujo para fazê-lo funcionar.

Pelo que pude apurar, parece ser principalmente uma questão de adicionar as instruções SQL corretas para o esquema PostgreSQL usando o adaptador de banco de dados correto, no entanto, não tenho certeza de como toda a orquestração para o contêiner Docker precisa ser adaptada para iniciar corretamente uma instância PostgreSQL, se necessário pelo tipo de banco de dados especificado na configuração, para importar o dump do banco de dados e executar as instruções contra ele.

2 curtidas

Existe um script de importação em massa para phpBB rodando em postgresql. Você o viu? discourse/script/bulk_import/phpbb_postgresql.rb at main · discourse/discourse · GitHub

No entanto, acho que ele não tem sido usado recentemente, então provavelmente está quebrado e pode não funcionar com as versões atuais do phpBB porque o formato de armazenamento Markdown mudou.

:+1:

Qualquer que seja o caminho que você escolher, eu não gastaria muito tempo aprimorando sua solução, a menos que você realmente queira. Os scripts de importação atuais serão descontinuados em algum momento deste ano…

2 curtidas

Obrigado, eu não estava ciente disso! E obrigado pelo aviso de que os scripts serão descontinuados, então acho que pode não valer a pena fazer um upstream de um recurso tão importante para eles se eles serão descontinuados em breve? Há um substituto planejado para eles?

1 curtida

Sim, claro que haverá um substituto.

3 curtidas

Outra coisa importante que eu estava me perguntando, preciso configurar algo além de disable_edit_notifications para garantir que nenhum dos usuários importados seja notificado por e-mail pelo Discourse sobre qualquer coisa que eu importar? Como atualmente a instância não é pública e estamos apenas experimentando a importação e provavelmente precisando de várias tentativas até que esteja boa o suficiente, quero evitar que quaisquer e-mails sejam enviados.

1 curtida

Você está procurando pela configuração do site disable_emails

4 curtidas

Embora [b]texto[/b] seja suportado inline no Discourse, ele não é interpretado para blocos de texto que possuem novas linhas.

[b]Por exemplo, se eu tiver este texto em minha postagem…

E eu continuar minha linha após uma linha vazia, eu fecho o bbcode e o texto não será convertido em texto em negrito[/b]

O mesmo vale para [i] e provavelmente outras tags.

Não consigo encontrar uma solução limpa para isso em minha importação. Alguma ideia? :man_shrugging:

2 curtidas

Esta não é uma solução ideal, mas tenho uma ideia para um plano B ou C, pelo menos.

Após a importação, você poderia remapear [b] para \u003cb\u003e e [/b] para \u003c/b\u003e, já que \u003cb\u003e funciona em bloco aqui

\u003cb\u003etest
\ntest\u003c/b\u003e

\u003cb\u003etest
\ntest\u003c/b\u003e

Mas em um fórum grande, levará um tempo :confused:

3 curtidas

Boa ideia!

Meu fórum ainda não foi importado, então ainda posso trabalhar no importador.

Não seria mais sensato usar <strong> e <em>, apesar de sua “propriedade” semântica?

2 curtidas

Ótima notícia!

Acho que é uma boa coisa para tentar primeiro.

2 curtidas