clean up uploads는 upload 레코드가 있는 모든 이미지를 포함하는 일반적인 설정으로 보입니다. 맞나요? download_remote_images_to_local로 인해 생성된 것만 그런 것이 아니라요. 맞다면, 자동 정리로 인해 삭제되지 않는 일반 이미지 업로드 사례를 사이트에서 찾을 수 있을 것입니다.
해결책으로 제안할 수 있도록 clean orphan uploads grace period hours가 여기서 어떻게 설정되어 있는지 물어봐도 될까요? 아니면 기본값이 있는 건가요?
그들이 해당 설정을 활성화하기로 결정하면, 과거 게시물에 적용하기 위해 별도로 해야 할 일이 있을까요?
수정
명확하게 하기 위해, 여기서는 이것이 문제가 아니라 설정을 켜야 한다는 것입니다. 나중에 "이걸 활성화해야 해요!"라고 했다가 "이미 활성화되어 있어요!"라는 답변을 받고 우스워지는 것은 원치 않으니까요.
저도 업로드된 파일을 찾아볼 수 있는 장소를 급하게 찾아보게 되었습니다. (MediaWiki에서 익숙한 기능인데) 같은 파일이 두 번, 세 번, 네 번이나 중복 업로드되는 경우가 많아서, 예전에 올렸다가 잃어버리거나 삭제된 파일이 어디 있는지 궁금할 때가 있거든요. 그러면 다시 올리는 대신 그 파일을 링크로 걸 수 있을 텐데 말이죠… 파일 브라우저 같은 기능이 필요하다는 생각이 드네요…
또한 업로드된 파일을 어쨌든 삭제해야 했습니다. 일부 파일은 다른 포럼 소프트웨어에서 가져온 것이며, 가져온 게시물에 아직 올바르게 참조되지 않아 정리(cleanup) 작업이 활성화되어 있지 않기 때문입니다. 따라서 수동으로 삭제하는 방법을 찾아야 했습니다. 다음 방법은 작동하지만 깔끔하지는 않습니다 …
해당 업로드가 현재 버전의 어떤 게시물에도 더 이상 존재하지 않는지 확인하십시오. 이렇게 하면 Discourse가 이를 고아(orphaned) 파일로 간주하여 삭제 시 문제를 일으키지 않습니다.
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
데이터베이스 또는 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
post_uploads를 upload_references로 이름 변경하면서 2단계에 나열된 SQL 쿼리는 더 이상 유효하지 않습니다. 업데이트된 코드는 다음과 같습니다:
SELECT
uploads.id, uploads.user_id, uploads.created_at,
uploads.url, uploads.filesize
FROM uploads
LEFT OUTER JOIN upload_references ON uploads.id = upload_references.upload_id
WHERE upload_references.target_id IS NULL
ORDER BY created_at DESC
LIMIT 100