S3로 마이그레이션이 불가능하여 백업에서 복원할 수 없습니다

OK, 결국 DB를 깊이 파고들어서 해결했습니다. 원래는 오래전에 폐기된 S3 환경(사실상 폐기된 것이 아니라, 비용 효율성이 없어 주로 사용하지는 않았지만 사용 가능한 S3 환경)에서 남은 잔재(71개의 업로드)였던 것으로 보입니다.

결국 이렇게 해결했습니다:

원본 서버에서:

  1. ./launcher enter app

  2. sudo -u postgres psql discourse

  3. SELECT url FROM uploads WHERE url NOT LIKE '%ExpectedS3DomainGoesHere%
    (ExpectedS3DomainGoesHere를 S3 설정에 사용하는 실제 URL로 대체하세요)
    작업에 필요한 URL을 가져오기 위한 단계입니다. 몇 가지 처리가 필요하기 때문입니다.

  4. URL이 다른 URL의 오래된 버킷에서 온 경우, Amazon S3 클라이언트(또는 S3 스토리지 백엔드 클라이언트)를 사용하여 다음을 수행합니다:
    a. 사용 가능한 경우 예상치 못한 URL의 버킷을 로컬 스토리지로 동기화합니다.
    b. 로컬에서 새 버킷으로 항목을 동기화합니다.

  5. discourse remap OLD-URL-FROM-DB NEW-URL-FROM-DB
    여기에서 DbHelper.remap 사용을 제안했지만, discourse의 remap 기능이 잘 작동했습니다.

  6. 데이터가 마이그레이션되었는지 확인합니다.
    rails uploads:migrate_to_s3

  7. Rebake 시간!
    rails posts:rebake

  8. ‘origin’ 머신/서버에서 사이트를 다시 백업합니다. 최신 업데이트를 다운로드합니다.

새 대상 서버에서:

  1. Discourse를 예상대로 설정하고, 재빌드 시 필요한 플러그인 등이 적절히 적용되도록 원본 서버의 app.yml 등을 새 서버의 /var/discourse/containers/로 복사합니다.
    로컬 백업 복사본을 작업하고 있다면 app.yml의 DISCOURSE_BACKUP_LOCATION: s3 항목을 주석 처리하도록 하세요. S3에서 백업 파일이 잘리는 이상 현상이 있어 복원을 위해 로컬 방식을 채택했습니다.

  2. Restore a backup from the command line 의 단계를 따라 백업을 서버로 가져오고 복원합니다. 재빌드 단계를 포함하여 수행합니다.

이 문제를 해결하는 데 제게는 고통스러운 과정이었지만, DB의 uploads 테이블을 깊이 파고들어서 해결되었습니다. 하지만, 이렇게 작동하는 것 같으니…