@gerhard : Seria possível realizar a limpeza de caracteres codificados incorretamente após a migração usando o Sidekiq? Sou muito novo no Discourse, então talvez eu não entenda como funciona.
Ou talvez um script SQL diretamente no MariaDB?
Claro! Você também poderia editar cada post manualmente. É cerca de 10 vezes mais fácil fazer isso antes, quando é possível simplesmente recomeçar.
Tentei várias coisas para corrigir a codificação no lado do MariaDB, mas não encontrei uma solução. Aqui está um código que usei para corrigir a codificação em uma importação em que estou trabalhando.
### Codificação WIN1252
win_encoded = ''
begin
win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
invalid: :replace, undef: :replace, replace: ""
).force_encoding('utf-8').scrub
rescue => e
puts "\n#{'-'*50}\nWin1252 falhou para \n\n#{raw}\n\n"
win_encoded = ''
end
Foi uma experiência dolorosa. Testei várias codificações e incluí várias no post para poder compará-las. Esta pareceu resolver a maioria dos problemas na maior parte do tempo. Demorei muito mais do que gostaria para entender .scrub, pois sem ela eu acabaria com strings que não poderiam mais ser processadas com gsub.
Alguém já tem uma boa solução para importar listas aninhadas do phpBB?
Não sou suficientemente experiente em Ruby para saber como abordar isso – estou travado neste código:
def process_lists(text)
# converte tags de lista para ul e tags list=1 para ol
# list=a não é suportado, então trate como list=1
# list=9 e list=x têm o mesmo resultado que list=1 e list=a
text.gsub!(/\[list\](.*?)\[\/list:u\]/mi) do
$1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "* #{$1}\n" }
end
text.gsub!(/\[list=.*?\](.*?)\[\/list:o\]/mi) do
$1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "1. #{$1}\n" }
end
end
Alguém tem uma ideia de como seria “iterar” sobre uma lista aninhada?
Ainda não, mas vou dar uma olhada, obrigado. Embora eu tente evitar usá-lo, pois não quero dar suporte a BBTags adicionais a longo prazo — eu realmente preferiria converter o conteúdo na importação. As listas aninhadas não são um impeditivo, mas seria ótimo tê-las.
Isso soa interessante, mas eu preferiria não mexer mais no phpBB. Além das listas, o processo de importação já está mais ou menos otimizado. Isso nos faria voltar a ter mais trabalho e testes. Mas é bom ver que o progresso do 3.2 está avançando bem.
Sim, temos lidado com esse tipo de problema há um mês agora, migrando um fórum legado vB3 com quase duas décadas de todos os tipos de usos malucos de bbcode, aninhamento, incorporação, etc.
Não é trivial fazer essa migração chegar a 99,9% de perfeição. Por exemplo, escrevemos código Ruby para remover todas as tags bbcode de nossas tags de código, porque o markdown não “gosta” de bbcode dentro de blocos de código delimitados.
Do nosso lado, ainda estamos finalizando muitas rotinas de pré-processamento em Ruby e estamos ficando cada vez mais próximos, mas nunca chegaremos à “perfeição” ou “100%” com quase duas décadas de postagens de alguns usuários de bbcode muito criativos (sem mencionar todos aqueles usuários que colaram conteúdo em postagens, etc…)
Ainda estamos trabalhando para resolver problemas relacionados à conversão de BBCODE para MD.
Parece que ainda estamos enfrentando alguns problemas com nomes de usuário sendo modificados ou não importados quando contêm certos caracteres especiais.
Existem problemas conhecidos com o importador ou estou configurando incorretamente a opção de nome de usuário unicode no Discourse? Ativei a opção, mas a lista branca ainda contém caracteres com acentos (como umlauts). Preciso excluir a lista branca para permitir todos os caracteres unicode ou preciso listar todos os caracteres? Minha ideia era que ativar o unicode permitiria todos os caracteres unicode, e desativá-lo permitiria apenas os da lista branca.
Durante a importação, parece que alguns caracteres, como @ ou *, são substituídos por _ – consigo imaginar que o @ possa causar problemas com menções (@mention), mas… eu só queria ter certeza antes de lidar manualmente com todos esses usuários antes da importação (o que seria um grande incômodo).
Primeiramente, obrigado por toda a documentação e pela ajuda neste tópico.
Acabei de importar um fórum antigo do phpBB3 para um novo do Discourse.
Tudo funcionou bastante bem com 200 mil posts e 20 mil anexos, mas o Sidekiq teve um pequeno problema ao processar tudo após a importação.
Agora estou enfrentando um novo problema com tags de imagem que estavam incluídas em tags de URL, assim: [url=http://www.casimages.com][img]http://nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg[/img][/url]
Após a importação (convertendo BBCode para Markdown), essas imagens aparecem apenas como links: [nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg](http://www.casimages.com)
Existe alguma maneira de processar/reassentar esses links para que sejam exibidos como imagens e possam ser automaticamente enviados para o S3?
Obrigado, Jay. Sim, já ativei a configuração “download remoto”. Meu problema é que essas imagens são exibidas como links (e a URL da imagem é apenas “a parte exibida” do link; o destino não corresponde a um conteúdo de imagem).
Atualmente, tenho um fórum importado do phpBB.
Estou pensando em importar outro fórum phpBB (36.000 mensagens, 230 membros) dentro da minha instalação Discourse existente. Eles compartilham categorias e usuários comuns.
As contas de usuários poderiam ser mescladas manualmente.
Quanto às mensagens, após a importação, elas seriam movidas manualmente para as categorias existentes.
Isso funcionaria de forma quase pronta para uso pelo script de importação ou seria um caos?
O que acontece se eu importar um fórum phpBB e alguns e-mails de usuários já existirem no meu Discourse atual?
Obrigado por essa informação valiosa que eu não tinha considerado
Sim, vou fazer isso e testar em um servidor de teste para ver se é possível gerenciar.
Sobre o contexto:
Eu hospedo um fórum nacional Discourse sobre monociclismo.
Também hospedo um fórum phpBB para uma associação local de monociclistas.
Ambos os fóruns compartilham alguns dos mesmos usuários, e alguns tópicos ou assuntos de discussão são redundantes. A ideia seria mesclar o fórum da associação local ao fórum nacional, eliminando a redundância de tópicos, e criar um grupo ou categoria para os tópicos relacionados à associação local.
Além disso, pessoas que estão apenas no fórum da associação local passarão a fazer parte do fórum nacional dessa forma e, talvez, tragam mais atividade.
Alguém tem uma ideia de qual pode ser o motivo do MySQL não estar rodando no contêiner de importação?
Já fiz várias execuções e sempre funcionou, mas agora estou recebendo:
Não é possível conectar ao servidor MySQL local através do topic:30810
Assim que tento iniciar a importação. Verifiquei tudo três vezes, recriei o contêiner de importação várias vezes. Tudo está lá, mas o MySQL parece não estar rodando.
Estou um pouco apavorado, pois essa é na verdade nossa verdadeira migração para o Discourse hoje.