Precisa mover alguns dados de uma instância do Discourse para outra?
Existe uma ferramenta de linha de comando para exportar um tópico, um conjunto de tópicos ou uma categoria inteira, e outra para importá-los na outra ponta.
Exportação/Importação de Tópicos
- um ou mais tópicos e suas respostas
- os usuários que postaram no tópico
Exportação/Importação de Categorias
- a categoria e todas as suas subcategorias
- suas configurações de segurança
- grupos personalizados mencionados nas configurações de segurança
se algum dos grupos tiver ‘solicitações de membros’ ativadas, o processo falhará. Desative isso antes da exportação
- todos os tópicos e postagens na categoria e nas subcategorias
- todos os usuários que postaram, e eles são atribuídos aos grupos
Início: Identifique os IDs
Primeiro, identifique o(s) ID(s) do =Export= que você deseja exportar. Você encontrará isso no final da URL usada para acessá-lo.
-
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797 -
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
(neste caso, você está no meio de um tópico - pegue o primeiro número) -
https://meta.discourse.org/c/howto/faq/4
IDs da Categoria ou Tópico
Múltiplos tópicos
Você pode selecionar mais de um tópico adicionando IDs separados por um espaço; isso funciona no campo acima (acho que isso não funciona para categorias, no entanto):
53797 200943 124096
Execute o Script de Exportação
A ferramenta pode ser executada como usuário root dentro do contêiner:
cd /var/discourse
./launcher enter app
Execute este comando:
discourse export_=Export= =ID=
A saída deve ser algo como:
Iniciando exportação de =Export=…
De onde vêm todos os novos usuários?
Exportação salva em =Export=-export-2021-08-27-015437.jsonConcluído
Mova o Arquivo Exportado
O arquivo .json exportado precisa ser movido de dentro do contêiner do aplicativo onde você fez a exportação para dentro do contêiner da instância de destino. Isso requer alguns passos.
Copie-o para o ‘lado de fora’
Saia do contêiner se ainda não o fez
exit
Você deve ter agora um prompt como este:
root@yourserver:/var/discourse
Use o docker para copiar o arquivo para fora do contêiner (acho que não é possível movê-lo)
docker cp app:/var/www/discourse/=FileName= .
Mova-o para a outra instância
Isso está fora do escopo deste guia, mas isso pode ajudar você a chegar lá:
Copie-o para dentro do contêiner na instância de destino
Acesse sua instância de destino via SSH como root e vá para o diretório do Discourse:
cd /var/discourse
Use o docker novamente para copiar o arquivo para o outro contêiner
docker cp =FileName= app:/var/www/discourse
Importe o Conteúdo
Entre no contêiner na instância de destino:
./launcher enter app
Execute o script de importação
discourse import_=Export= =FileName=
Concluído!
Você pode precisar resolver alguns detalhes pendentes, mas, espera-se, tudo estará feito.
Dicas Avançadas
Falta de Gem do Ruby
Ao fazer uma importação complexa de categoria, minha instância estava sem o ‘Listen’ do Ruby.
Isso foi resolvido fazendo o seguinte: (usando o usuário discourse dentro do contêiner)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
Isso quebrou o console do Rails, exigindo uma reconstrução posteriormente
./launcher rebuild app
Multisite
Em um ambiente multisite, use a variável de ambiente RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Por favor, relate bugs na categoria Contribute > Bug e solicite melhorias na categoria Contribute > Feature.
Tópicos Relacionados
Última Revisão por @SaraDev em 2022-07-13T00:00:00Z