我还必须以某种方式删除一个已上传的文件。我们没有启用清理任务,因为有些文件来自另一个论坛软件的导入,并且尚未在导入的帖子中正确引用。因此,我需要找到一种手动方法。以下方法有效,但并不理想……
-
确保相关上传不再是任何帖子当前版本的一部分。这样,Discourse 会将其视为孤立文件,并在您删除它时不会引起麻烦。
-
使用 Data Explorer 插件 或其他方法查询 Discourse 数据库,列出孤立的上传文件,找到相关的那个,并记下其 upload_id 和 filename。相关查询:
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 -
在数据库中或使用 Discourse 的 Rails 控制台 通过其 upload ID 删除
uploads表中相关的记录。这里我使用 Rails 控制台:Upload.where(id: 16384).first.delete -
通过 SSH 删除文件系统中的关联文件,包括所有优化版本(如果有,适用于图像)。请注意,在文件扩展名前添加了通配符,以捕获此处带有后缀的优化版本。当然,
cd /path/to/discourse/shared/public/ find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete