S3에서 멀티사이트 백업 문제 - 루트에 백업 저장됨

AWS EC2에 멀티사이트 인스턴스를 운영하고 있습니다. 백업은 다음과 같이 구성했습니다:

DISCOURSE_S3_BACKUP_BUCKET: lc-sitename
DISCOURSE_S3_SECRET_ACCESS_KEY: secret-key
DISCOURSE_S3_ACCESS_KEY_ID: key-id
DISCOURSE_BACKUP_LOCATION: s3

멀티사이트 인스턴스의 백업은 버킷 루트에 저장되고 있지만, UX의 목록에는 표시되지 않습니다. 메인 사이트의 백업은 예상대로 default 하위에 저장됩니다. 이로 인해 백업이 복원 화면에서 보이지 않고, 설정에 따라 정리되지도 않습니다.

멀티사이트 스탠사는 다음과 같은 형태입니다:

        site:
           adapter: postgresql
           database: site
           pool: 25
           timeout: 5000
           host: data
           password: secret
           host_names:
             - community.site.org

DISCOURE_USE_S3가 설정되지 않으면 백업이 잘못된 위치에 저장되는 것일까요? (discourse.conf에서 use_s3를 설정해 보았지만, unicorn을 재시작하지 않고 대신 커맨드라인으로 백업을 실행했는데, 여전히 루트에 저장되었고 서브사이트 이름 하위에 저장되지 않았습니다.)

S3 업로드에 문제가 있었던 적이 있습니다(버킷 설정 오류일 수 있음), 따라서 S3는 백업에만 사용되고 있습니다.

이 문제로 또 1시간 반을 보냈습니다.

멀티사이트 중 하나는 업로드 백업을 올바른 디렉토리에 제대로 저장하고 있지만, 두 개는 그렇지 않습니다.

올바른 위치에 저장되지 않는 사이트들은 단일 사이트 인스턴스에서 데이터베이스가 복원된 것이었기 때문에, 데이터베이스에 백업이 사이트 이름(또는 기본 사이트의 경우 기본값) 대신 백업 폴더의 루트로 저장되도록 강제하는 무언가가 있을 것이라고 추측합니다.

@gerhard, 번거롭게 해드려 죄송합니다. 제가 간과하고 있는 명백한 실수가 있는지 간단히 확인해 주시겠습니까?

네, 업로드 저장은 디자인 상으로, 백업이 단일 사이트 인스턴스에서 온 경우 다르게 복원됩니다.

      was_multisite = BackupMetadata.value_for("multisite") == "t"
      upload_path = "/#{Discourse.store.upload_path}/"
      uploads_folder = was_multisite ? "/" : upload_path

하지만 이 문제는 이미지가 복원되는 위치에 관한 것이 아니라, 백업이 저장되는 위치에 관한 것이 아니었나요?

네, 맞습니다.

그렇습니다.

하지만 실수했습니다:

제가 (올바르게) 이전에 말했듯이, 이 인스턴스는 (현재) 업로드가 아니라 백업에만 S3를 사용하고 있습니다.

3개 서브사이트 중 2개 사이트의 백업이 백업 버킷의 루트에 저장되고 있습니다. 프라이머리 사이트는 예상대로 default에 저장하고 있고, 멀티사이트 인스턴스 중 하나는 sitename 디렉토리에 저장하고 있습니다.

음, 그건 좀 이상한 동작이네요. 브라우저에서 업로드한 백업인지, 시스템이 생성한 백업인지 말씀하시는 건가요?

시스템이 생성한 백업이 잘못된 위치에 저장되는 이유는 모르겠습니다. 코드는 꽤 직관적으로 보입니다.

s3_helper는 올바른 버킷과 멀티사이트 이름으로 설정됩니다.

웹 인터페이스나 rake 태스크를 통해 백업을 만드는 것을 말씀하는 건데, 3개 멀티사이트 호스트 중 2개(둘 다 다른 서버에서 마이그레이션된 것)의 경우, 백업이 sitename/backupname 경로가 아니라 백업 S3 버킷의 루트 경로에 업로드됩니다.

저한테도 이상하게 느껴집니다.

해당 함수에 puts를 추가해서 원인을 추적해 보겠습니다.

source_path에 puts를 출력해 봤는데, OS에서는 올바른 전체 경로가 표시되었지만, S3에 업로드될 때 경로에서 사이트 이름이 사라져 있습니다.

다음 주에 다시 자세히 살펴보겠습니다. 백업 파일은 존재하지만, Discourse가 찾을 수 있는 위치에 있지 않을 뿐입니다.