How to Delete Uploaded Files?

Мне также пришлось каким-то образом удалить загруженный файл. У нас не включена задача очистки, так как некоторые файлы были импортированы из другого программного обеспечения для форумов и ещё не были корректно связаны с импортированными сообщениями. Поэтому мне нужно было найти ручной способ. Приведённый ниже метод работает, но выглядит не очень элегантно…

  1. Убедитесь, что соответствующая загрузка больше не содержится ни в одной версии текущего сообщения. Тогда Discourse посчитает её «осиротевшей» и не создаст проблем при удалении.

  2. Используйте плагин Data Explorer или другой способ для запроса к базе данных Discourse, чтобы вывести список «осиротевших» загрузок, найти нужную и записать её upload_id и имя файла. Соответствующий запрос:

    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. В базе данных или через консоль Rails для Discourse удалите соответствующую запись из таблицы uploads по её upload ID. Здесь я использую консоль Rails:

    Upload.where(id: 16384).first.delete
    
  4. Удалите соответствующий файл, включая все оптимизированные версии (если есть, касается изображений), из файловой системы через SSH. Обратите внимание на маску подстановки, добавленную перед расширением файла, чтобы также захватить оптимизированные версии, которые имеют здесь суффикс. Конечно,

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