OK, 결국 DB를 깊이 파고들어서 해결했습니다. 원래는 오래전에 폐기된 S3 환경(사실상 폐기된 것이 아니라, 비용 효율성이 없어 주로 사용하지는 않았지만 사용 가능한 S3 환경)에서 남은 잔재(71개의 업로드)였던 것으로 보입니다.
결국 이렇게 해결했습니다:
원본 서버에서:
./launcher enter app
sudo -u postgres psql discourse
SELECT url FROM uploads WHERE url NOT LIKE '%ExpectedS3DomainGoesHere%
(ExpectedS3DomainGoesHere를 S3 설정에 사용하는 실제 URL로 대체하세요)
작업에 필요한 URL을 가져오기 위한 단계입니다. 몇 가지 처리가 필요하기 때문입니다.URL이 다른 URL의 오래된 버킷에서 온 경우, Amazon S3 클라이언트(또는 S3 스토리지 백엔드 클라이언트)를 사용하여 다음을 수행합니다:
a. 사용 가능한 경우 예상치 못한 URL의 버킷을 로컬 스토리지로 동기화합니다.
b. 로컬에서 새 버킷으로 항목을 동기화합니다.
discourse remap OLD-URL-FROM-DB NEW-URL-FROM-DB
여기에서 DbHelper.remap 사용을 제안했지만, discourse의 remap 기능이 잘 작동했습니다.데이터가 마이그레이션되었는지 확인합니다.
rails uploads:migrate_to_s3Rebake 시간!
rails posts:rebake‘origin’ 머신/서버에서 사이트를 다시 백업합니다. 최신 업데이트를 다운로드합니다.
새 대상 서버에서:
Discourse를 예상대로 설정하고, 재빌드 시 필요한 플러그인 등이 적절히 적용되도록 원본 서버의 app.yml 등을 새 서버의
/var/discourse/containers/로 복사합니다.
로컬 백업 복사본을 작업하고 있다면 app.yml의DISCOURSE_BACKUP_LOCATION: s3항목을 주석 처리하도록 하세요. S3에서 백업 파일이 잘리는 이상 현상이 있어 복원을 위해 로컬 방식을 채택했습니다.Restore a backup from the command line 의 단계를 따라 백업을 서버로 가져오고 복원합니다. 재빌드 단계를 포함하여 수행합니다.
이 문제를 해결하는 데 제게는 고통스러운 과정이었지만, DB의 uploads 테이블을 깊이 파고들어서 해결되었습니다. 하지만, 이렇게 작동하는 것 같으니…