Imagens perdidas no backup/restauração, mudança de domínio, não consigo carregar novas

Nosso grupo manteve nosso Discourse em um domínio temporário por dois meses, até concordarmos com o nome do domínio definitivo. Ontem, tentei migrar todo o conteúdo do domínio antigo para o novo. Todo o conteúdo de texto, as contas de usuário e até os links entre tópicos foram transferidos corretamente. Mas agora:

  • Todas as imagens incorporadas do passado parecem ter sido perdidas.
  • Não é possível fazer upload de novas imagens.

Este foi o meu processo:

  • Criei um novo aplicativo Discourse em um novo droplet da DigitalOcean.
  • Conectei o novo nome de domínio a esse novo droplet.
  • Confirmei que ambos os aplicativos Discourse e todos os plugins estavam atualizados com as versões mais recentes do software disponíveis.
  • Coloquei o Discourse antigo no modo somente leitura, para evitar a adição de qualquer novo conteúdo.
  • Executei um backup do Discourse antigo.
  • Fiz o upload do backup para o novo Discourse.
  • Atualizei o endereço de e-mail do Discourse do e-mail do domínio antigo para o e-mail do novo domínio.
  • Executei um teste de notificações, e elas funcionaram no novo Discourse.
  • Naveguei por todas as configurações do Discourse para atualizar qualquer menção ao domínio antigo para o novo domínio.
  • Alterei o subdomínio antigo para redirecionar para seu domínio correto e adicionei temporariamente uma nota e um link para o novo Discourse lá.

Como mencionado acima, a maior parte do conteúdo parece ter sido transferida perfeitamente. Mas agora, um dia depois, notamos que as imagens incorporadas antigas foram perdidas e não é possível fazer upload de novas imagens. Apenas o conteúdo “alt” delas aparece. Segue uma captura de tela de um exemplo.

Ao pesquisar no Google, parece haver vários tópicos extensos sobre isso, mas não encontrei nenhum que inclua uma mudança de nome de domínio e a incapacidade de fazer upload novamente.

Acabei de tentar resolver isso da seguinte forma:

  • Acessei a máquina via SSH.
  • Entrei no diretório do Discourse e entrei no aplicativo.
  • Executei rake posts:missing_uploads. Isso relatou:
Looking for missing uploads on: default

0 post uploads are missing.
  • Executei rake uploads:missing. Isso relatou uma longa lista:
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
  • Executei rake uploads:recover_from_tombstone. Isso não produziu nenhuma saída.

Admito que não sei o que esses comandos Rake estão fazendo.

Também posso ver no arquivo containers/app.yml que DISCOURSE_HOSTNAME é o subdomínio e domínio corretos (novos).

Executar ./launcher rebuild app parece não alterar nada.

Alguém pode ajudar, por favor? Obrigado.

Você já tentou um rebake?

cd /var/discourse
./launcher enter app
rake posts:rebake

Obrigado pela sugestão. Acabei de inserir seus comandos e não vejo nenhuma diferença. As imagens antigas ainda não aparecem. As novas imagens continuam falhando no upload. Aliás, o console do navegador lança um erro “GET 404” após a conclusão da tentativa de upload.

Atualização:

Não sei exatamente qual comando melhorou a situação, mas ela melhorou, embora não tenha sido totalmente resolvida.

  • Consigo criar e fazer upload de novos arquivos dos tipos TXT, DOCX, XLSX, JPG e PNG.
  • A maioria (mas não todos) dos uploads antigos de todos os tipos agora estão sendo exibidos e baixados corretamente.

Os uploads problemáticos eram exibidos/baixados sem problemas antes, sem nenhuma reclamação. E eles se recusam a aparecer após o reupload em novos posts de teste. Como exemplo:

Esta imagem: https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

É exibida corretamente (no meu Discourse) quando uma URL é inserida em uma linha própria, como abaixo:

Mas ela desaparece do post após eu finalizar a publicação e atualizar a página, deixando o que parece ser apenas uma única linha em branco. Ao inspecionar o código-fonte, revela-se um elemento de imagem com o atributo SRC definido para um caminho no meu domínio estruturado como https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. E esse caminho, quando aberto em uma nova aba, carrega uma página de erro 404 do NGINX.

Quando baixo a imagem da fonte original para meu laptop e faço o upload no meu Discourse (como farei aqui neste Discourse abaixo), ela falha no meu Discourse.

No meu Discourse, ela aparece assim:

E se eu clicar com o botão direito nessa imagem com falha e selecionar “Abrir Imagem em Nova Aba”, ela carrega uma página de erro 404 do NGINX.

Vejo nesta caixa de diálogo de composição agora que o Discourse altera a extensão da imagem de JPG para JPEG, mas não acho que isso faça diferença.

Se eu abrir a imagem baixada no aplicativo Affinity Photo, exportá-la sem compressão como um novo JPG e reenviá-la ao meu Discourse, ela é exibida corretamente no meu Discourse.

Isso sugere para mim que o problema ainda está no meu Discourse, e não nos arquivos enviados.

Encontrei esse problema durante uma transferência recente.

A maneira mais fácil e não técnica de resolver isso foi fazer login no seu site/hospedagem original com o FileZilla, navegar até

VAR/Discourse/Uploads

Aqui você encontrará subpastas com imagens. Simplesmente as baixei do host original e as carreguei no novo.

Uma alternativa mais rápida é usar este método de backup. É um processo manual, mas também funcionou bem.

Obrigado pela resposta. Nunca usei o aplicativo FileZilla. Uso o aplicativo Transmit para FTP. Mas não sei como me conectar ao meu aplicativo Discourse no meu droplet da DigitalOcean usando FTP.

Posso fazer SSH no meu droplet e navegar até /var/discourse/, mas não há nenhum diretório uploads lá.

Mesmo que eu movesse manualmente os arquivos de imagem da localização antiga para a nova, como isso resolveria a falha ao reenviar as mesmas imagens?

Minha compreensão muito básica do Discourse (e sou bastante iniciante) é que as imagens enviadas são armazenadas no seu site, e também uma versão otimizada do tamanho do arquivo da imagem. Inicialmente, a imagem original é exibida aos usuários e, em algum momento, o fórum muda para uma imagem otimizada (para mim, isso parecia ocorrer após 24 horas).

Fiz alguns testes com as configurações, pois estava preocupado em ficar sem espaço de armazenamento.

No seu painel de administração, verifique-os (na seção Arquivos). Existem várias configurações para controlar o tamanho e as dimensões das imagens. Isso pode estar relacionado ao seu problema com a imagem problemática (se eu entendi corretamente). Por exemplo, sua imagem reformatada ainda está fora dos critérios.

Meu problema ao transferir servidores do Digital Ocean para o Hetzner foi que algumas imagens (e avatares) simplesmente não apareciam (semelhante à sua primeira captura de tela). Minha solução foi movê-las via FTP (bruto, mas funcionou). Não tenho 100% de certeza do motivo. Inicialmente, movi apenas as imagens otimizadas e isso não resolveu o problema, mas quando movi todas as imagens, o problema foi resolvido.

Peço desculpas pelo erro na pasta; estava fazendo de memória. A estrutura de pastas é: VAR/Discours/Shared/Standalone/Upload

É muito fácil fazer login com um cliente FTP no Digital Ocean:

Host: endereço IP do Discourse
Porta: 22
Usuário: root
Senha: sua senha SSH

Como disse, estou longe de ser um especialista; sou apenas alguém que vem mexendo nisso nos últimos meses.

Há pessoas aqui que podem oferecer conselhos e insights melhores. Mas, se tudo mais falhar, pode valer a pena tentar minha abordagem.

Minha solução foi mover os arquivos via FTP (brutal, mas funcionou). Não tenho 100% de certeza do motivo. No início, movi apenas as imagens otimizadas e isso não resolveu o problema, mas quando movi todas as imagens, o problema foi resolvido.

Obrigado pelas instruções mais detalhadas sobre como fazer FTP nos meus dois Discourse. A pasta uploads tinha cerca de 125 MB no Discourse antigo e 60 MB no novo. Então, copiei o antigo para a área de trabalho do meu laptop. Em seguida, copiei seu conteúdo, pasta por pasta, para o novo Discourse, pulando qualquer duplicação.

E, para minha surpresa, parece que isso resolveu o problema. Todos os uploads de imagens parecem estar corrigidos, tanto em tópicos anteriores à minha migração do Discourse quanto em tópicos que criei hoje durante a solução de problemas.

Posso teorizar que o Discourse estava reutilizando ponteiros pré-existentes para conteúdo que, de alguma forma, foi perdido na transferência. Então, se eu fizesse o upload exato do mesmo arquivo de imagem, ele reutilizaria um ponteiro quebrado e falharia repetidamente. Mas, quando eu o re-salvei como um novo arquivo, ele teve sucesso porque armazenou uma nova cópia com um novo ponteiro. Talvez.

Obrigado novamente, muito obrigado.

Por padrão, os backups não contêm imagens otimizadas, pois elas podem ser recriadas. Incluí-las desperdiçaria largura de banda e espaço em disco.

No seu caso, teria ajudado incluí-las ativando a configuração do site include_thumbnails_in_backups antes de criar o backup.

Como alternativa, executar rake posts:rebake_uncooked_posts após a restauração também teria funcionado. Caso contrário, as imagens otimizadas são regeneradas por uma tarefa em segundo plano, mas isso leva algum tempo… Há uma mensagem de log no final da restauração que informa exatamente isso.