Limpeza de uploads e purga de uploads do S3

:bookmark: Este é um guia de referência que descreve como uploads órfãos e excluídos são automaticamente removidos 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

Alguma vez 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!

Você pode precisar excluir arquivos e imagens carregados no Discourse 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 uma tarefa Sidekiq automática agendada para remover uploads órfãos e excluídos chamada 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 não for referenciado:

  • Na versão mais recente de uma postagem
  • Em um rascunho
  • Em uma postagem em fila
  • Em uma configuração do site (por exemplo, logotipo, favicon)
  • Em um emoji personalizado
  • Em um tema
  • Em um avatar de usuário/imagem de fundo/imagem de cartão
  • Em um logotipo de categoria/imagem de fundo
  • Em uma imagem de insígnia
  • Em uma imagem de destaque de grupo

:information_source: Os 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ê deverá fazer uma das seguintes ações:

  • Forçar o upload a se tornar órfão removendo qualquer referência ao upload. Isso pode ser feito editando o link do upload fora da postagem em que está, ou de qualquer outro local onde o upload possa ser referenciado.
  • Excluir todos os tópicos/postagens que contêm 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) assim que a tarefa clean up uploads for executada.

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 verdadeiro
  • 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 ativar ou desativar a exclusão automática de uploads órfãos não referenciados. A configuração clean orphan uploads grace period hours controla quanto tempo após a detecção de um upload órfão ele será removido. A configuração purge deleted uploads grace period days controla quanto tempo os uploads tombstoneados (excluídos) são retidos antes de serem removidos permanentemente — isso é tratado por uma tarefa agendada separada chamada purge deleted uploads.

Detalhes adicionais sobre a tarefa 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 aplica-se 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 do seu armazenamento S3.

A limpeza de uploads órfãos e excluídos funciona de maneira semelhante para ambos os armazenamentos local e S3. A única diferença entre o armazenamento local e o S3 é que a limpeza dos uploads S3 é tratada automaticamente pelo S3 por meio 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, a tarefa clean up uploads inclui uploads S3. No entanto, se você desejar desativar 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.