Como excluir arquivos enviados?

Também tive que excluir um arquivo carregado de alguma forma. Não temos a tarefa de limpeza ativada, pois alguns arquivos vêm de uma importação de um software de fórum diferente e ainda não foram referenciados corretamente em posts importados. Portanto, precisei encontrar uma maneira manual. O seguinte funciona, mas não é elegante…

  1. Certifique-se de que o upload relevante não esteja mais na versão atual de nenhum post. Dessa forma, o Discourse o considerará órfão e não causará problemas ao excluí-lo.

  2. Use o plugin Data Explorer ou outra maneira de consultar o banco de dados do Discourse para listar uploads órfãos, encontrar o relevante e anotar seu upload_id e filename. Consulta relevante:

    SELECT 
      uploads.id, uploads.user_id, uploads.created_at, 
      uploads.url, uploads.filesize
    FROM uploads
      LEFT OUTER JOIN post_uploads ON uploads.id = post_uploads.upload_id
    WHERE post_uploads.post_id IS NULL
    ORDER BY created_at DESC
    LIMIT 100
    
  3. No banco de dados ou com o console Rails para Discourse, exclua o registro associado da tabela uploads pelo seu ID de upload. Aqui eu uso o console Rails:

    Upload.where(id: 16384).first.delete
    
  4. Exclua o arquivo associado, incluindo todas as versões otimizadas (se houver, aplica-se a imagens) do sistema de arquivos via SSH. Observe o curinga adicionado antes da extensão do arquivo para capturar também as versões otimizadas, que têm um sufixo aqui. Claro,

    cd /path/to/discourse/shared/public/
    find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete
    
1 curtida