최근 업데이트 이후 왜 CDN에서 에셋을 서빙하지 않게 되었는지 이해가 되지 않습니다. 우리는 Cloudfront을 사용 중이며, 업로드된 파일과 에셋 모두를 서빙하는 데 잘 작동하고 있었습니다. 하지만 최신 업데이트 이후 에셋이 CDN 대신 서버에서 서빙되고 있는 것으로 보입니다.
또 다른 문제는 DISCOURSE_CDN_URL 변수를 전달하면, Discourse가 s3:upload_assets 작업에 의해 생성되거나 업로드되지 않은 에셋(예: 스타일시트)을 요청하기 시작한다는 점입니다. 이로 인해 사이트가 완전히 깨져 흰 화면만 표시됩니다. 이 게시물에서 비슷한 문제를 언급하고 있습니다.
네, DISCOURSE_CDN_URL을 제거해야 했습니다. rake s3:upload_assets 태스크로 S3에 업로드되지 않는 에셋을 요청하기 시작했고, 이로 인해 사이트가 완전히 깨져버렸거든요. 아마도 이 부분이 변경된 것 같고, 다시 올바르게 작동하도록 rake s3:upload_assets를 업데이트해야 할 것 같습니다.
네, DISCOURSE_CDN_URL과 DISCOURSE_S3_CDN_URL에 동일한 CDN URL을 사용하는 것은 가능하지만, URL에 따라 각 자산에 올바른 소스를 사용하려면 CDN에 많은 양의 로직이 필요합니다. 예를 들어, CSS는 앱에서, JS는 S3에서 제공되며, 이것은 하나의 경우일 뿐 수십 가지 경우가 있습니다.
따라서 DISCOURSE_CDN_URL은 웹 앱으로의 "프록시"이고, DISCOURSE_S3_CDN_URL은 오브젝트 스토리지 버킷으로의 프록시인 두 값을 모두 설정해야 한다는 것이 기대되는 동작입니다.
이 페이지를 검사해 보면 두 가지 다른 Cloudfront URL이 있는 것을 확인할 수 있습니다. 따라서 위에서 말씀드린 대로 두 개의 배포를 사용하며, 하나는 일반 CDN용이고 다른 하나는 S3용입니다.
OP 제목에서 언급된 문제는 다음과 같습니다. CSS는 앱에서, JS는 S3에서 제공됩니다. 모든 개별 자산이 어디에서 오는지 파악하고 필요한 위치로 접근할 수 있는 CDN이 필요하거나, 두 개의 CDN이 필요합니다. 그래서 결국 두 가지 다른 설정을 사용하게 된 것입니다.
이제 이해하니 완전히 말이 되긴 하지만, 이것이 문서화되어 있는지 확실하지 않습니다. 그리고 문제가 생길 가능성이 높습니다(적어도 저는 그랬습니다!). move-uploads-to-s3 rake 작업은 s3_cdn이 있어야 요구하기 때문입니다. 이것이 제가 여러 번 S3로 파일을 이동하려다 결국 포기하게 된 이유를 설명해 줍니다.
어딘가에 "에이, 에셋 CDN이 없으면 S3 CDN을 가질 수 없습니다"라는 경고가 있으면 좋았을 텐데 싶습니다.