アップロードされたファイルを削除するには?

アップロードされたファイルをどうにかして削除する必要もありました。一部のファイルは別のフォーラムソフトウェアからのインポートによるもので、インポートされた投稿でまだ正しく参照されていないため、クリーンアップタスクは有効にしていません。そのため、手動で削除する方法を見つける必要がありました。以下は、見た目は良くありませんが機能する方法です…

  1. 関連するアップロードが、現在の投稿のバージョンに存在しないことを確認します。これにより、Discourse はそれを孤立したファイルとみなし、削除時に問題を起こしません。

  2. Data Explorer プラグイン または別の方法を使用して Discourse データベースをクエリし、孤立したアップロードを一覧表示し、関連するものを特定して、その upload_idfilename をメモします。関連するクエリは次のとおりです。

    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 console for Discourse を使用して、uploads テーブルから該当するレコードをその upload ID で削除します。ここでは Rails console を使用します。

    Upload.where(id: 16384).first.delete
    
  4. 関連するファイル(最適化されたバージョンがあればそれらすべて、画像に適用されます)を SSH 経由でファイルシステムから削除します。ファイル拡張子の前にワイルドカードを追加して、ここにサフィックスが付く最適化されたバージョンもキャッチできるように注意してください。もちろん、

    cd /path/to/discourse/shared/public/
    find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete
    
「いいね!」 1