¿Cómo eliminar archivos subidos?

También tuve que eliminar de alguna manera un archivo subido. No tenemos habilitada la tarea de limpieza, ya que algunos archivos provienen de una importación de un software de foro diferente y aún no se han referenciado correctamente en las publicaciones importadas. Así que necesitaba encontrar una forma manual. Lo siguiente funciona, pero no es elegante…

  1. Asegúrate de que la carga relevante ya no esté en la versión actual de ninguna publicación. De esa manera, Discourse la considerará huérfana y no causará problemas cuando la elimines.

  2. Usa el plugin Data Explorer o una forma diferente de consultar la base de datos de Discourse para listar las cargas huérfanas, encontrar la relevante y anotar su upload_id y 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. En la base de datos o con la consola Rails para Discourse, elimina el registro asociado de la tabla uploads por su upload_id. Aquí uso la consola Rails:

    Upload.where(id: 16384).first.delete
    
  4. Elimina el archivo asociado, incluidas todas las versiones optimizadas (si las hay, se aplica a las imágenes) del sistema de archivos a través de SSH. Ten en cuenta el comodín añadido antes de la extensión del archivo para capturar también las versiones optimizadas, que tienen un sufijo aquí. Por supuesto,

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