É seguro configurar meus níveis de confiança, selos e outras configurações do Discourse antes da importação? Estou pensando que este importador apenas inserirá/substituirá posts/tópicos/perfis? Eu odiaria configurar tudo nas configurações do Discourse e ter isso apagando essas configurações, embora eu não veja nada no código relacionado a isso imediatamente.
Sim, mas faça um backup. Você provavelmente precisará alterar as coisas e executá-lo várias vezes, começando do zero, então mantenha um backup de sua configuração sem dados importados.
Ele insere. Na maioria das vezes, não substitui nada. Se um usuário existir, ele não o alterará. Ele não usará as categorias que você configurou. Se você executá-lo novamente, com um banco de dados atualizado de seu site antigo, ele adicionará novos dados, mas não alterará as coisas que foram importadas em execuções anteriores. Isso o torna muito mais rápido, mas se você precisar alterar o script por algum motivo, precisará excluir tudo e começar de novo.
Então, duas coisas. Primeiro, existe uma maneira de fazer isso rodar mais rápido? Estou em um Linode de 32 CPUs com 64 GB de RAM e ainda leva de 4 a 5 horas para importar 250 mil posts.
Segundo, ele importa anexos antes ou depois dos posts? Porque olhando o script, parece que ele faz isso depois. É uma pena ter que esperar de 4 a 5 horas só para descobrir que os anexos não foram importados.
Tudo depende dos dados anteriores, na maior parte, o pós-processamento pode aproveitar as múltiplas CPUs, mas isso não começa até que você termine, na maior parte. Obtenha uma única CPU que seja mais rápida.
Você pode modificar o script para importar apenas uploads recentes, mas se você não planeja fazer um grande desenvolvimento, apenas espere as 5 horas.
Bem, já tentei isto várias vezes e os anexos não estão a ser importados, e estou a ficar sem ideias. Espero que alguém me possa ajudar (obrigado @pfaffman pela tua ajuda até agora).
Coloquei os ficheiros *.data na sua estrutura de pastas original do xenforo (ou seja, a pasta ‘attachments’) em /root/attachments no contentor docker. Atualizei o script de importação para /root/attachments. Posso ver os ficheiros em /root/attachments na linha de comandos com ls.
Executei o script, e todas as vezes (após cerca de 4-5 horas de espera), todas as publicações com anexos/fotos mostram o antigo bbcode do xenforo ([ATTACH]123456[/ATTACH]) e não vejo quaisquer imagens ou anexos na instalação do discourse.
O que posso estar a fazer de errado? Sinto que estou 90% lá, apenas me falta alguma coisa.
Você terá que olhar o código. O código de anexo está sendo executado? Seus anexos estão no formato que o script espera?
Se a função de anexo for executada após a importação do post, você não precisará executá-la novamente, ela simplesmente pulará os posts (ou comentará a importação do post para torná-la um pouco mais rápida).
Mas há uma série de coisas que podem estar erradas, desde você não configurá-lo corretamente até ele simplesmente não funcionar com sua versão do zenforo. Você terá que olhar o código e adicionar alguma saída de depuração para ver o que está acontecendo.
Bem, só para informar a todos que encontrarem este tópico, eu não consegui fazer os anexos funcionarem com este script, não importa onde eu os colocasse. Na minha opinião, o script precisa de trabalho e as instruções especialmente precisam de muito trabalho para serem mais claras sobre o que vai onde e como.
Até lá, eu consideraria este script como quebrado.
Provavelmente funciona para algumas pessoas com alguma versão e alguma configuração, apenas não para aquela que você está usando. É surpreendente o quão diferente cada importação é.
O script oficial de importação do XenForo está com defeito agora?
A importação de usuários e categorias funciona bem,
mas a importação de posts com a pasta de anexos está apresentando problemas
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113289 / 146471 ( 77.3%) [3766 items/min] Exception while creating post 162516. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113290 / 146471 ( 77.3%) [3766 items/min] Exception while creating post 162517. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc
Qual versão do Redis você tem?
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.
A versão atual do script de importação perdeu muitos anexos porque eles nem sempre são incorporados ao BBcode da postagem. Fiz um pull request com várias melhorias e correções. O script agora vê todos os anexos e também importa curtidas, avatares e mensagens privadas, e cria permalinks para categorias e tópicos.
@gerhard, acredito que esse PR esteja com você no momento. Você poderia, por favor, mesclá-lo quando tiver um tempo?
Sim, notei isso ontem.
Eu tinha me esquecido completamente disso. Vou revisar hoje ou na semana que vem.
Isso já foi mesclado ao código? Tive que voltar para o xenforo por outros motivos, mas gostaria de migrar para o discourse quando este script estiver funcionando.
Desculpe, eu deveria ter verificado o github, parece que foi mesclado em 28 de novembro.
6 posts were split to a new topic: AVATAR_DIR constant not specified in XenForo import script
Eu só queria dar seguimento e informar a quem estiver tentando migrar do Xenforo (e encontrar este tópico pelo Google ou qualquer outro meio) que existe um importador em teste para o software de fórum Flarum aqui:
Interessante, mas seria ainda mais interessante se tivéssemos um importador sólido do XenForo para o Discourse.
O sujeito parece muito confiante no que está fazendo e eu aplaudo isso!
Fiz uma importação do XenForo recentemente. Fiz algumas alterações para adicionar recursos, mas agora não me lembro quais não eram específicos para aquele fórum.

