Limpeza e exclusão de uploads do S3

:bookmark: Este é um guia de referência que descreve como uploads órfãos e excluídos são removidos automaticamente de um site Discourse. Este guia se aplica a sites Discourse auto-hospedados e hospedados.

:person_raising_hand: Nível de usuário necessário: Administrador

Você já se perguntou o que acontece com arquivos e imagens que foram carregados em um site Discourse, mas não são mais referenciados, ou como remover uploads de um site? Você está no lugar certo!

Pode ser necessário excluir arquivos e imagens que são carregados no Discourse e que não são mais referenciados. Não há uma maneira integrada de fazer isso pela interface do usuário, no entanto, o Discourse possui um trabalho automático do Sidekiq agendado para remover uploads órfãos e excluídos chamado clean up uploads.

Uploads órfãos e excluídos

:information_source: Uploads órfãos são arquivos que foram carregados em um site Discourse, mas não são mais referenciados. Um upload é considerado órfão se e somente se ele não for referenciado:

  • Na versão mais recente de uma postagem
  • Em um rascunho
  • Em uma postagem enfileirada
  • Em uma configuração de logotipo do site
  • Em um emoji personalizado
  • Em um tema
  • Em uma imagem de avatar/fundo/cartão de usuário
  • Em um logotipo/imagem de fundo de categoria

:information_source: Uploads são considerados “excluídos” quando o tópico/postagem em que estão contidos é excluído.

Limpeza de uploads

Para remover completamente um upload do Discourse, você terá que fazer uma das seguintes ações:

  • Forçar o upload a se tornar órfão removendo qualquer referência a ele. Isso pode ser feito editando o link do upload na postagem em que ele se encontra, ou em qualquer outro lugar onde o upload possa ser referenciado.
  • Excluir todos os tópicos/postagens contendo o upload, fazendo com que o upload seja considerado “excluído”. Observe que você precisa remover a imagem da postagem antes de excluir a postagem para torná-la órfã.

Todos os uploads órfãos não referenciados e uploads excluídos serão então removidos do armazenamento (após um período de carência) quando o trabalho clean up uploads for executado.

Configurações do site

As seguintes configurações do site estão disponíveis em example.discourse.com/admin/site_settings/category/files para modificar como o Discourse remove automaticamente os uploads.

  • clean up uploads: padrão true
  • clean orphan uploads grace period hours: padrão 48
  • purge deleted uploads grace period days: padrão 30

A configuração clean up uploads pode ser usada para habilitar ou desabilitar a exclusão automática de uploads órfãos não referenciados. clean orphan uploads grace period hours e purge deleted uploads grace period days são as duas configurações que controlam quanto tempo após um upload órfão ou excluído detectado ser removido e permanentemente excluído do site.

Detalhes adicionais sobre o trabalho clean up uploads estão disponíveis no arquivo clean_up_uploads.rb no GitHub.

Remoção de uploads S3

:warning: A seção a seguir é aplicável apenas a sites Discourse auto-hospedados.

:information_source: Se você estiver atualmente hospedado em nosso Plano Empresarial, entre em contato com team@discourse.org se tiver alguma dúvida sobre a exclusão de uploads de seu armazenamento S3.

A limpeza de uploads órfãos e excluídos funciona de forma semelhante para armazenamentos locais e S3. A única diferença entre o armazenamento local e os armazenamentos S3 é que a limpeza dos uploads S3 é tratada automaticamente pelo S3 através de uma política de “tombstone”. Consulte Gerenciando o ciclo de vida do seu armazenamento para obter detalhes adicionais sobre como isso é tratado no S3.

Por padrão, o trabalho clean up uploads inclui uploads S3. No entanto, se você deseja desabilitar esse recurso, pode desmarcar a configuração do site s3 configure tombstone policy.

4 curtidas

Isso está correto? Acho que você precisa remover a imagem do post antes de excluir o post para órfão-lo.

Além disso, este último não deveria ser purge deleted uploads grace period days?

1 curtida

Ativar a opção “limpar uploads” parece assustador com a mensagem de aviso. Ao converter um fórum existente para o Discourse, essa configuração será desativada. Nem todos os scripts de importação registrarão corretamente todos os uploads nas postagens, portanto, se você ativá-la, poderá perder muitos anexos.

Com a seguinte consulta, você pode verificar se os uploads estão devidamente referenciados pelas postagens:

select p.post_id, u.id as upload_id
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
where not exists(select * from upload_references r where r.upload_id = u.id)

Isso não deve retornar nenhuma linha se tudo estiver correto. Se você usar esta consulta no plugin Data Explorer, ela também vinculará de forma organizada as postagens que possuem anexos não referenciados.

Se a consulta acima retornar resultados, você poderá corrigir as referências de upload ausentes com a seguinte consulta:

insert into upload_references(upload_id, target_type, target_id, created_at, updated_at)
select u.id, 'Post', p.post_id, u.created_at, u.updated_at
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
on conflict do nothing;

Você precisará de acesso direto ao banco de dados para fazer a alteração corretiva.