Migrar um fórum SMF2 para Discourse

Desculpe responder novamente. Estou com dificuldade para entender por que os links permanentes não estão sendo criados. :frowning:

Para recapitular:
Estou usando as URLs feias padrão do SMF2 no domínio raiz de nível superior. O Discourse está instalado em um subdomínio desse domínio raiz. Usei o importador smf2.rb do repositório mais recente do Discourse para converter o SMF2 para o Discourse (seguindo seu guia), mas não há links permanentes no Discourse após o término da importação.

Há alguma etapa adicional necessária, como certas configurações ou plugin(s) em execução no SMF2 ou no Discourse?

Parece que essa função é para URLs amigáveis? Então você precisaria alterá-la de acordo (a menos que eu tenha perdido algo no código).

1 curtida

Estou um pouco confuso porque o Marco não usou URLs amigáveis, mas os links permanentes foram criados para ele e ele usou o mesmo script de importação.

Esta é a função de URLs amigáveis no script de importação: discourse/script/import_scripts/smf2.rb at main · discourse/discourse · GitHub

Espero por alguma ajuda para fazer isso funcionar com as URLs “feias” padrão do SMF… qualquer orientação será muito apreciada. :pray: Obrigado, pessoal.

Eu não sei. Mas minha melhor resposta gratuita é que acho que você deve olhar para a linha 222, que diz:

           Permalink.find_or_create_by(url: "forums/index.php/board,#{c["id_board"]}.0.html", category_id: category.id)

Você mudaria esse permalink (ou talvez alguns outros?) para o que os feios parecem? Embora, para mim, isso já pareça bem feio. Você também pode ajustar o permalink_normalizations no topo do arquivo.

Desculpe, Jay, por responder a você novamente, mas a linha 222 está onde? A linha 222 de smf2.rb é apenas:

if parent

Bem, você e eu estamos olhando para versões diferentes, então. Não tenho certeza do motivo disso. Mas o que você deve procurar são aquelas linhas sobre Permalinks.

Estou confuso porque a versão que linkei parece ser a mais recente versão “oficial”… mas você é a segunda pessoa que mencionou uma versão diferente. O que estou deixando passar? Onde posso obter a sua versão?

Aha! Desculpe. Parece que cliquei no script smf1. Então, olhe para smf1.rb1, que está logo ali junto com o script smf2.rb que você está analisando.

Você pode examinar o script smf1 ou usar make_prettyurl_permalinks como modelo para criar um make_uglyurl_permalinks. Mas isso está lendo da tabela de URL amigável, então pode ser mais fácil usar smf1.rb como modelo, mas eu precisaria verificar o banco de dados para ter certeza. Não. Isso também não ajudará muito, a menos que você modifique as funções create_xxx.

Desculpe. Não vejo uma correção que possa ser explicada aqui.

1 curtida

Estou farto, mas não consigo avançar. Cheguei a criar um novo usuário no servidor MySQL com senha nativa e tentei, sem sucesso.

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:701:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': RSA Encryption not supported - caching_sha2_password plugin was built with GnuTLS support (Mysql2::Error)

OK, após MUITAS horas de idas e vindas tentando fazer isso funcionar, identifiquei o problema e estou postando aqui para qualquer outro que possa ficar preso como eu.

O contêiner Docker do MySQL é da versão 8; por algum motivo, a biblioteca do MariaDB que o modelo do MySQL utiliza não funciona.

Eu não incluí o arquivo do modelo do MySQL na configuração do contêiner Docker de importação; essa foi a primeira alteração.

Construí o contêiner de importação e entrei nele com ./launcher enter import

Em seguida:

echo "gem 'mysql2'" >> Gemfile
wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
dpkg -i mysql-apt-config_0.8.17-1_all.deb

Isso apresenta um prompt interativo e você pode selecionar as opções padrão (MySQL 8 com ferramentas).

Depois, instalei a biblioteca normal do MySQL 8 e continuei a construção:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'bundle config unset deployment'
su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'

Após tudo isso, o restante foi o mesmo, e a importação agora está rodando.

Os desenvolvedores do Discourse podem querer ajustar os scripts de importação para levar isso em consideração; pelo menos, isso já está nos fóruns para que outros vejam se ficarem presos como eu.

3 curtidas
  1. Devo destruir conforme estas instruções? how-to-migrate-import-from-smf2-to-discourse/90129#cleanup-5

  2. Transferei manualmente o diretório de anexos do SMF2 para o Discourse antes de importar e, em seguida, executei o importador uma vez, mas os uploads não estão aparecendo nas postagens no Discourse. Alguma ideia do porquê?

  3. Já executei o importador uma vez sem o S3 ativado, mas quero usar o S3. O que devo fazer?

  1. Sim
  2. Hmm… eu tentaria ativar o S3 e reimportar.
  3. Ative o S3 antes de iniciar a importação.
1 curtida

Eu já executei o importador uma vez sem S3. As uploads de tópicos que já foram importados seriam transferidas para o S3 durante uma importação delta?

O ideal é que você comece do zero e ative o S3 antes de importar.

Estou recebendo este erro ao criar usuários:

oxipng worker: oxipngnão encontrado; por favor, forneça o binário adequado ou desative este worker (argumento --no-oxipng ou:oxipng => false nas opções)

Depois disso, ele começa a criar as postagens.

  • Será que é por isso que os anexos não estão aparecendo no Discourse?
  • Onde o oxipng deve ser instalado?

Atualização: Estou confuso sobre o motivo do erro do oxipng. Não consigo encontrar nada sobre isso em lugar nenhum no Discourse, e estou enfrentando esse problema apenas ao executar o script de importação do smf2. Será que pode estar relacionado a isso? https://meta.discourse.org/t/faster-and-smaller-uploads-in-discourse-with-rust-webassembly-and-mozjpeg-blog

Isso é apenas um aviso da biblioteca de otimização de imagens que usamos no lado do servidor; não deve bloquear nada.

2 curtidas

Então, pensei que meus problemas de importação pudessem estar relacionados a questões do S3, mas parece que o S3 está funcionando perfeitamente. O problema que estou enfrentando é que, após executar o script de importação (com o S3 habilitado) e reconstruir o contêiner de importação, parece que todos os tópicos no Discourse estão sem os uploads que são anexos nos tópicos do smf2. Em outras palavras, não há nenhum indicador visual de que há um upload em um tópico do Discourse, algo que é claramente visto como um anexo no equivalente em tópicos do smf2. O resultado é o mesmo quando importo com o S3 desabilitado. Estou um pouco sem ideias aqui. :confused: Alguma sugestão?

Pode ser que as imagens estejam anexadas ao post, então o script de importação sabe que deve importá-las, mas elas não são referenciadas no post, por isso não aparecem. Você precisa modificar o texto do post para incluir um link para as imagens. Já vi isso, acho que em outro fórum.

Você quer dizer modificar a postagem no SMF2 para incluir links para os arquivos anexados antes de importar para o Discourse?

Bem, isso poderia ser uma maneira.

Mas quero dizer modificar o script de importação para anexar o anexo à postagem bruta. Algo como