Precisa mover alguns itens 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ópico
- um ou mais tópicos e suas respostas
- os usuários que postaram no tópico
Exportação/Importação de Categoria
- 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 associação ativadas, ele travará. Desative isso antes da exportação
- todos os tópicos e posts na categoria e subcategorias
- todos os usuários que postaram, e os atribui aos grupos
Começando: Identifique os IDs
Primeiro, identifique o(s) ID(s) da =Exportação= que você deseja exportar. Você encontrará isso no final do URL usado 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
ID(s) 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 isto:
> Iniciando a exportação de =Export=…
>
> De onde vêm todos os novos usuários?
> Exportação salva em =Export=-export-2021-08-27-015437.json
>
> Pronto
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 recebimento. Isso requer algumas etapas.
Copie para o ‘exterior’
Saia do contêiner se ainda não o fez
exit
Você deve ter um prompt como este:
> root@seuservidor:/var/discourse
Use o docker para copiar o arquivo para fora do contêiner (acho que você não consegue movê-lo)
docker cp app:/var/www/discourse/=FileName= .
Mova para a outra instância
Isso está além do escopo deste guia, mas isto pode ajudar você a chegar lá:
Copie para o contêiner na instância de recebimento
Faça SSH na sua instância de recebimento como root e acesse o diretório Discourse:
cd /var/discourse
Use o docker mais uma vez 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 recebimento:
./launcher enter app
Execute o script de importação
discourse import_=Export= =FileName=
Pronto!
Você pode precisar organizar algumas pontas soltas, mas, com sorte, tudo estará feito.
Dicas Avançadas
Gem Ruby Faltando
Ao fazer uma importação de categoria complexa, minha instância estava sem o Ruby ‘Listen’.
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 rails, necessitando de uma reconstrução depois
./launcher rebuild app
Múltiplos Sites
Em um ambiente de múltiplos sites, 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 bug, e solicite melhorias na categoria #feature.
Tópicos Relacionados
Última Revisão por @SaraDev em 2022-07-13T00:00:00Z
\u003cdiv data-theme-toc=“true”\u003e \u003c/div\u003e