Ajuda para migrar categoria de uma instância para outra sem admin na instância de origem

Nossa equipe tem operado como convidada em outra instância do Discourse. Estamos configurando nossa própria instância do Discourse e gostaríamos de migrar nossas categorias da instância existente para a nova instância. Não temos acesso de administrador ao servidor existente, mas os administradores estão dispostos a fazer uma exportação de categoria para nós. No entanto, essa exportação não contém anexos ou imagens. Temos acesso à API da instância existente, mas apenas às nossas categorias. Temos acesso de administrador na nova instância.

É possível migrar anexos e imagens usando apenas a API da instância existente?

Eu estava olhando o JSON exportado e os nomes dos arquivos de anexo são strings aleatórias diferentes do que é servido no navegador, o que torna a engenharia reversa da API para baixar anexos e imagens não tão direta. Mesmo que pudéssemos baixar todos os anexos da instância existente, não tenho certeza de como adicioná-los à nova instância. Esta postagem me faz acreditar que é tão fácil quanto colocá-los nesse local com o requisito de que os nomes dos arquivos sejam idênticos aos do JSON exportado, mas isso não parece funcionar.

Alguma ideia?

1 curtida

Você pode explicar o que quer dizer com isso?

Se você olhar os dados processados para um fluxo de postagem json, você obterá os URLs normais dos anexos.

4 curtidas

Desculpe, não pude responder pois sou novo e minha conta estava retida.

Na exportação JSON da categoria (usando o método vinculado acima), o anexo em uma postagem específica se parece com isto:

![image|505x473](upload://yyWAy3WPpjetoctRNL9hmPvNNwm.jpeg

No JSON processado da API, a mesma imagem tem a seguinte URL:

https://my.server.com/uploads/default/original/2X/f/f23d29caba9a31b2b63b93f4104d746623703ca2.jpeg

Aparentemente, não há relação nos nomes dos arquivos. Com base nessas informações, posso usar a API para buscar os anexos que não estão incluídos na exportação. Mas não tenho certeza de qual nome de arquivo dar a ele e onde colocá-lo no novo servidor.

Depois que isso for resolvido, seria possível que os anexos aparecessem nas páginas de tópicos renderizados quando carregados, como antes da migração?

1 curtida

Se eu olhar para o conteúdo cozido via API (por exemplo, este), então eu vejo os URLs completos para as imagens.

Mas acho que você pode estar procurando por isto:

2 curtidas

Retornando com uma solução que funciona em uma instância de teste que ainda não testei em produção.

Isso é para que meu eu futuro possa repassar à equipe que realmente fará a migração ou a qualquer outra pessoa que precise de algo semelhante.

Os anexos devem receber o nome completo, que pode ser convertido do nome curto no JSON através do script Python em Converting short upload URLs to full URLs

Os anexos devem ser colocados em discourse/public/uploads/tombstone/default/original/

Em seguida, execute uploads:recover_from_tombstone enquanto estiver em /var/discourse/

3 curtidas