Wie lösche ich hochgeladene Dateien?

Ich musste auch irgendwie eine hochgeladene Datei löschen. Wir haben die Bereinigungsaufgabe nicht aktiviert, da einige Dateien aus einem Import von einer anderen Forensoftware stammen und noch nicht korrekt in importierten Beiträgen referenziert wurden. Daher musste ich einen manuellen Weg finden. Das Folgende funktioniert, ist aber nicht schön …

  1. Stellen Sie sicher, dass der relevante Upload nicht mehr in der aktuellen Version eines Beitrags vorhanden ist. Auf diese Weise betrachtet Discourse ihn als verwaist und macht keine Probleme, wenn Sie ihn löschen.

  2. Verwenden Sie das Data Explorer Plugin oder eine andere Methode, um die Discourse-Datenbank abzufragen, um verwaiste Uploads aufzulisten, den relevanten zu finden und seine upload_id und seinen Dateinamen zu notieren. Relevante Abfrage:

    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. Löschen Sie in der Datenbank oder mit der Rails-Konsole für Discourse den betroffenen Datensatz aus der Tabelle uploads anhand seiner Upload-ID. Hier verwende ich die Rails-Konsole:

    Upload.where(id: 16384).first.delete
    
  4. Löschen Sie die zugehörige Datei inkl. aller optimierten Versionen (falls vorhanden, gilt für Bilder) vom Dateisystem über SSH. Beachten Sie das Wildcard-Zeichen vor der Dateiendung, um auch optimierte Versionen zu erfassen, die hier ein Suffix haben. Natürlich,

    cd /path/to/discourse/shared/public/
    find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete
    
1 „Gefällt mir“