Corrigindo ou limpando links e ativos quebrados após uma restauração

Tivemos uma falha no servidor e tivemos que criar um novo servidor e restaurar a partir de um backup. Foi um processo angustiante, detalhes sobre o que aconteceu e como restauramos aqui.

Agora, após a restauração (a chave foi desativar os uploads do S3), todos os links para anexos nas postagens estão quebrados (erro 404). Pesquisei no fórum e não encontrei uma solução e espero que alguém possa me indicar a direção certa.

Tenho duas opções:

  1. Posso consertar esses links short-url quebrados que apontam para anexos incorporados em postagens (todos os links quebrados são para anexos em postagens; imagens incorporadas são renderizadas corretamente, outros links internos funcionam bem)?

Por exemplo, o URL do anexo em uma postagem no fórum aparece como https://XYZ.com/uploads/short-url/phu1HOLvkE8LWpkKYfnMPSWsvHh.zip. É isso que estou vendo nos logs quando clico em um link de anexo em uma postagem (que leva a um 404).

Mensagem (5 cópias relatadas)

Falha ao processar a resposta sequestrada corretamente: Errno::ENOENT: No such file or directory @ rb_sysopen - /XXXXX.s3.dualstack.us-east-1.amazonaws.com/optimized/1X/46728e07f9819907d1b18387bf02ea7fc25c7981_2_32x32.ico

Backtrace

/var/www/discourse/app/controllers/static_controller.rb:160:in read' /var/www/discourse/app/controllers/static_controller.rb:160:in block (2 levels) in favicon’
/var/www/discourse/lib/distributed_memoizer.rb:16:in block in memoize' /var/www/discourse/lib/distributed_mutex.rb:33: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/distributed_memoizer.rb:12:in memoize’
/var/www/discourse/app/controllers/static_controller.rb:138:in block in favicon' /var/www/discourse/lib/hijack.rb:56:in instance_eval’

Espero realmente que haja uma maneira de corrigir esses links short-url após desativar a opção de upload do S3 ao restaurar o servidor a partir de um backup. Um re-bake da postagem não resolveu.

  1. Se por algum motivo isso for um beco sem saída e não puder ser corrigido em massa, agora que tenho milhares de anexos órfãos na nuvem S3, há alguma maneira de limpá-los e liberar espaço? Existe alguma maneira de o Discourse percorrer seu bucket de uploads S3 e limpar todos os ativos órfãos?

Poderia ser, ou ter sido, possível descobrir como corrigir esses links, mas descobrir como está além do escopo do que é viável em um fórum.

Upload.sha1_from_short_url('phu1HOLvkE8LWpkKYfnMPSWsvHh.zip')
=> "b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7"

Verifique se você tem um arquivo chamado b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7.zip em algum lugar em seus uploads e/ou bucket s3. Se sim, então deve ser possível, embora não fácil, corrigir as coisas.

Como você não incluiu os nomes reais do fórum ou do bucket, não podemos dizer aqui.

1 curtida

Sim, encontrei isso em:

original/2X/b/b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7.zip

Ficarei feliz em te enviar os links/detalhes por mensagem privada.

O engraçado é que apenas os anexos (como arquivos) estão quebrados. Qualquer imagem incorporada é exibida normalmente.

Então o material está todo lá, você só precisa reescrever as postagens de alguma forma. Não tenho certeza por que não está funcionando, mas os arquivos estão lá.

Existe uma maneira de executar isso em massa do console ou da interface do usuário ou “baixar” esses arquivos do S3 para o local?

Eu acredito que sim, mas acho que alguém familiarizado com Discourse e Rails precisará escrevê-lo. Não estou ciente de uma solução existente para o seu problema. Existem alguns tópicos sobre a movimentação entre buckets S3 que podem oferecer algumas pistas, mas não acho que seu problema específico tenha sido resolvido antes.

Após a restauração, você deveria ter reativado a opção de upload S3. Parece que você não fez isso?

2 curtidas

E é difícil de fazer, já que foi definido no app.yml, o que pode fazer isso.

Isso resolveria o problema? Só queria saber se é seguro tentar.

Bem, sim, foi o que eu recomendei que você fizesse em primeiro lugar…
Se você não reativar os uploads do S3, a função short-url procurará por esses uploads localmente, mas eles estão no S3.

2 curtidas

Eu vou tentar, mas por outro lado, quando eu o ativei, ele quebrou a restauração (veja meu outro tópico). Com a ajuda do Jay, tive que descobrir como desativar o upload para eventualmente restaurá-lo. Você conseguiu restaurar um servidor com a opção ativada com sucesso?

Você precisa\n\n* Desativar a configuração\n* Restaurar\n* Ativar a configuração\n\nComo descrevi em nossa troca de mensagens privadas na semana passada

2 curtidas