Мне также пришлось каким-то образом удалить загруженный файл. У нас не включена задача очистки, так как некоторые файлы были импортированы из другого программного обеспечения для форумов и ещё не были корректно связаны с импортированными сообщениями. Поэтому мне нужно было найти ручной способ. Приведённый ниже метод работает, но выглядит не очень элегантно…
-
Убедитесь, что соответствующая загрузка больше не содержится ни в одной версии текущего сообщения. Тогда Discourse посчитает её «осиротевшей» и не создаст проблем при удалении.
-
Используйте плагин 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 -
В базе данных или через консоль Rails для Discourse удалите соответствующую запись из таблицы
uploadsпо её upload ID. Здесь я использую консоль Rails:Upload.where(id: 16384).first.delete -
Удалите соответствующий файл, включая все оптимизированные версии (если есть, касается изображений), из файловой системы через SSH. Обратите внимание на маску подстановки, добавленную перед расширением файла, чтобы также захватить оптимизированные версии, которые имеют здесь суффикс. Конечно,
cd /path/to/discourse/shared/public/ find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete