프로덕션 환경에 전체를 배포하기 전에 Discourse 포럼을 구축하고 테스트하며 의도적으로 갭을 찾아왔습니다. S3 업로드가 활성화된 테스트 포럼을 한 서버에서 다른 서버로 마이그레이션했는데, 복원 후 첨부된 모든 항목의 URL이 S3가 아닌 포럼 URL로 다시 작성(rewrite)되었습니다.
다행히 테스트 포럼이라 데이터에 대해 크게 신경 쓸 필요는 없지만, 다음 두 가지를 하고 싶습니다:
A. 이 문제를 여전히 수정하고 싶습니다.
B. 프로덕션 환경에서 이런 일이 일어나지 않도록 완화/방지할 방법을 찾고 싶습니다.
영향을 받은 것은 게시글만이 아니라 이미지/미디어/콘텐츠/아바타(이건 꽤 심각한 문제입니다)까지 전부였습니다…
app.yml 파일을 원본 그대로 대상 위치에 복사한 뒤, 원본에서 백업했습니다. 문제는 복원 과정에서 발생했는데, 아무것도 변경하지 않았고 S3 업로드가 여전히 활성화되어 있었음에도 불구하고 복원을 수행했을 때 URL이 다시 작성(rewrite)되었기 때문입니다.
결국 rebake를 통해 이 문제를 해결했습니다(우리는 그렇게 생각하고 있습니다. Discourse의 캐싱이 매우 강력하기 때문에, 우리가 시도한 여러 해결책 중 실제로 어떤 것이 문제를 해결했는지 정확히 알지 못합니다). 그러나 여전히 해결되지 않은 질문이 남아 있습니다. 즉, 최소한의 문제로 마이그레이션을 수행하는 방법, 또는 프로덕션 환경에서 백업에서 복원해야 할 경우 어떻게 해야 하는지에 대한 질문입니다.
제가 지나치게 설명을 생략하고 있다는 점, 그리고 세부 사항을 숨기려는 의도는 아니라는 걸 깨달았습니다.
우리는 OVH S3를 사용하며, 이는 app.yml에서 설정됩니다.
저는 업로드 없이 테스트 포럼을 백업했지만, 그 시점에도 S3는 활성화되어 있었습니다.
이후 동일한 app.yml을 사용하여 새 사이트에 복원했는데, 그때 문제가 시작되었습니다. 명확히 하자면, 지금은 문제가 해결되었지만, 여러 번 rebake를 반복한 것이 원인인지, 아니면 Discourse가 공격적으로 캐싱을 한 것인지 불분명합니다. 그래서 제가 제대로 된 방법을 알고 처음부터 올바르게 처리하는 법을 알아야 합니다. 제 걱정은, 만약 프로덕션 인스턴스에 백업을 복원해야 할 때 이 문제가 다시 발생하면, 사용자가 알아채기 전에 즉시 정확히 어떻게 수정해야 하는지 알아야 한다는 것입니다.
따라서 위의 S3 업로드 URL이 https://some-bucket-name-here.s3.bhs.io.cloud.ovh.net/optimized처럼 작성될 것으로 예상했지만, 실제로는 https://forum.somedomainhere.com/uploads/optimized로 작성되어 있었습니다. 당연히 이는 작동하지 않습니다.
원하시면 VM을 다시 시작하여 전체 복원(restore)을 수행하고, 제가 취한 모든 단계를 검증해 드릴 수 있습니다.