Consegui com dificuldade migrar minha comunidade XenForo existente para o Discourse, então pensei em compartilhar minha experiência aqui para ajudar quem estiver tentando fazer o mesmo. Tenha em mente que não sei o que estou fazendo, então algumas das minhas inferências podem estar incorretas. Consegui completar a importação para o Discourse com cerca de 20% de perda de anexos. Não consigo explicar realmente o porquê, mas o problema parece afetar apenas os últimos 2-3 anos de postagens no meu fórum, enquanto tudo antes disso teve uma taxa de importação bem-sucedida de cerca de 95+%. Minha única suposição é que tem algo a ver com a mudança de XF 1.x para XF 2.x.
Qualquer um que tente isso deve saber que este script precisa de muitas atualizações para funcionar com o XF 2.x. Especificamente, as linhas 375-378 não possuem as tabelas de banco de dados corretas para importar anexos da Xenforo Media Gallery. Eu contornei isso desconectando o XFMG do fórum e desinstalando-o, já que eu estava apenas usando o XFMG para espelhar anexos do fórum de qualquer maneira.
Se você estiver curioso, a linha 376 se refere à tabela xengallery_media, que obviamente é uma referência ao XFMG 1.x, pois esta tabela foi alterada para xf_mg_media_item no XFMG 2.x. O resto eu não consigo fazer corresponder e suspeito que algum código extra seja necessário para corresponder os IDs dos anexos às postagens.
Acabei comentando a linha 314: s = process_xf_attachments(:gallery, s)
Para que o script não desse erro na tabela SQL ausente.
Com isso feito, segui a postagem de @Jack51 neste tópico:
com as seguintes edições:
a etapa seis precisa da versão do mariadb atualizada. mude mariadb-server-10.3 para mariadb-server-10.5
a etapa sete deve ser service mariadb start em vez de service mysql start.
Eu mudei
frozen_string_literal: true
para
frozen_string_literal: false
Já que obtive o mesmo erro que outra pessoa mencionou neste tópico.
Parece que houve MUITA confusão neste tópico sobre onde colocar os anexos para que o script os visse, e admito que tive alguma dificuldade com isso também. Para pessoas completamente novas em docker (como eu), seria extremamente útil apontar que, embora os dockers sejam essencialmente uma máquina virtual rodando no seu servidor (então você está lidando com dois sistemas operacionais/sistemas de arquivos diferentes), existe um espaço compartilhado para transferência de arquivos:
/var/discourse/shared/standalone/tmp
este diretório está localizado na sua máquina host, e os arquivos colocados lá aparecerão em:
/shared/tmp
quando você entrar no contêiner docker. Então, assumindo que você mantenha a mesma estrutura de arquivos/pastas do xenforo, você copiaria as pastas:
internal_data/attachments
para
/var/discourse/shared/standalone/tmp
na sua máquina host, e essa pasta apareceria em /shared/tmp após entrar no seu contêiner docker.
Em seguida, ao editar o script xenforo.rb, mude:
ATTACHMENT_DIR = '/tmp/attachments'
para
ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'
e você terá seus anexos localizados no local correto. Vale a pena notar que o xenforo também tem uma pasta data/attachments, mas ela está cheia de arquivos .jpg em vez dos arquivos .data que você procura. Vi alguém cometer esse erro anteriormente neste tópico, então achei que valia a pena apontar.
Além disso, recebi um erro de permissão do script, então talvez você precise usar chmod no diretório:
sudo chmod a+rw -R /shared/tmp/internal_data/
Eu diria que a maior pista de que o script não está captando seus anexos é que ele ficará estranhamente quieto, quando na verdade deveria estar apresentando erros ocasionais:
Portanto, se a importação durar várias horas sem um único erro listado, provavelmente não está captando os anexos.
É tudo o que tenho. Não me entenda mal, fico feliz que este script exista, uma taxa de sucesso de 80% é melhor do que nada (tive uma taxa de sucesso semelhante ao migrar de vBulletin para XenForo em 2009), e estou animado para trabalhar com a plataforma Discourse. Espero que esta postagem ajude algumas pessoas e talvez um dia alguém com melhores habilidades do que eu possa atualizar este script para funcionar um pouco melhor.
