백업에는 여러 디렉터리와 하위 디렉터리가 포함되어 있습니다. 양쪽 버킷의 디렉터리 내 파일을 재귀적으로 로컬 서버의 해당 위치로 복사해야 한다고 생각합니다. 예를 들어, 양쪽 버킷의 1X 및 2X 디렉터리에 있는 모든 내용은 로컬 서버의 1X 및 2X 디렉터리로 복사되어야 합니다. 확실하지는 않지만 그렇게 생각됩니다.
모든 파일이 올바르게 복사되었는지 확인해 주실 수 있나요?
백업에는 여러 디렉터리와 하위 디렉터리가 포함되어 있습니다. 양쪽 버킷의 디렉터리 내 파일을 재귀적으로 로컬 서버의 해당 위치로 복사해야 한다고 생각합니다. 예를 들어, 양쪽 버킷의 1X 및 2X 디렉터리에 있는 모든 내용은 로컬 서버의 1X 및 2X 디렉터리로 복사되어야 합니다. 확실하지는 않지만 그렇게 생각됩니다.
모든 파일이 올바르게 복사되었는지 확인해 주실 수 있나요?
네, 완전히 이해했으며 상대 경로가 정확히 동일하도록 유지했습니다.
예를 들어, 이전에는 파일이 다음 위치에 존재했습니다:
//bucket1/uploads/original/2x/f/filename.jpg
그리고 다른 파일은:
//bucket2/uploads/original/1x/a/filename.png
이제 두 파일 모두 다음 위치에 존재합니다:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg 와 ../original/1x/a/filename.png
문제점
버킷 내용을 로컬 서버로 복사하기 전에, 일부 이미지가 아이콘으로만 표시되고 있으며, 웹사이트 방문자는 해당 아이콘을 클릭해야만 전체 이미지를 볼 수 있었습니다.
그런 다음 버킷 내용을 모두 로컬 서버의 aforementioned 위치에 복사(이동이 아닌 복사)하고(상대 경로를 그대로 유지한 상태에서),
discourse remap:oldurl-or-path new-url-or-path
명령을 실행했습니다.
그런데 사이트에서 눈에 띄는 변화가 전혀 없었습니다. 하지만 이후
rake posts:rebake
명령을 실행하자,
이미지 아이콘조차 사라졌고, 이미지 플레이스홀더의 빈 부분에 마우스 포인터를 올려도 URL/경로가 표시되지 않았습니다.
충분한 세부 정보를 제공했기를 바랍니다.
그렇다면 아래 방법으로 문제가 해결될 것입니다.
./launcher enter app
discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
rake posts:rebake
ji님, 감사합니다.
하지만 이미 설명드린 것처럼 'remap’과 ‘rebake’ 작업을 수행하면 이미지 아이콘까지 사라지는 등 상황이 더 악화됩니다.
리맵핑 시 올바른 경로를 지정해야 합니다. 그렇지 않으면 문제가 발생할 수 있습니다. 이전에 제공한 샘플 출력의 S3 링크 중 하나를 수동으로 리맵핑해 보았는데 정상적으로 작동합니다.
버킷에 호스팅된 이미지:
로컬 서버에 호스팅된 동일한 이미지:
새 탭에서 이미지를 열면 위 두 이미지의 링크를 확인할 수 있습니다. 따라서 이 방식이 작동할 것으로 추정합니다.
./launcher enter app
discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
rake posts:rebake
다시 한번 감사합니다.
(첫 번째) 이미지를 우클릭했는데, URL 바에 표시된 경로는 제 버킷의 것이 아니었습니다:
두 번째 이미지에서도 같은 상황이었습니다.
제 웹사이트의 게시물 1개를 여기에서 확인해 보실 수 있습니다. (게시물은 힌디어로 작성되어 있지만, 게시물 중간에 작은 이미지 아이콘을 쉽게 찾으실 수 있습니다.) 작은 아이콘을 클릭해야만 전체 이미지가 표시됩니다.
하지만 리맵(remap)을 하고 다시 베이킹(rebake)을 하면 이 아이콘마저 완전히 사라집니다. 그러면 방문자가 이미지를 볼 수 있는 방법이 전혀 남지 않습니다.
이전에 CloudFront를 캐싱에 사용하신 것 같습니다. 브라우저 캐시를 지우고 다시 시도해 보세요.
CloudFront 설정을 변경하셨다면, 해당 설정을 모두 되돌리는 것이 좋습니다.
저희 웹사이트에서는 지난 약 2년 동안 Cloudflare {edit: CloudFront}(또는 기타 CDN)을 사용하지 않았습니다.
메타에 있는 이미지는 Cloudflare에 저장되어 있을 수 있습니다.
Cloudflare가 아니라 CloudFront입니다. 브라우저 캐시를 삭제해 보셨나요?
네, CloudFront입니다 (죄송합니다).
네, 삭제했습니다. 또한 이 주제를 Firefox의 시크릿 모드에서 열었습니다.
지금 저도 동일한 CloudFront 링크를 받고 있습니다. 사이트에서 AWS CloudFront를 활성화하신 것 같습니다. CloudFront가 버킷의 이미지를 캐싱하고 있습니다. CloudFront에서 배포를 제거해야 할 것 같습니다. CloudFront 배포가 활성화되어 있는지 확인하려면 AWS 계정에 로그인해야 합니다?
안녕하세요, 여기서는 CloudFront에 대해 오해하고 있었습니다. 실제로는 meta discourse가 이미지를 캐싱하고 있었습니다. 제 실수입니다.
저도 여기서 CloudFront에 대해 오해했습니다. 실제로는 메타 디스커스가 이미지를 캐싱했습니다. 이전 게시물을 수정했습니다. 확인해 주세요.
이미지 경로를 S3 버킷 URL에서 로컬 서버 경로로 재매핑하라고 제안하고 계신 거죠. 그리고 다시 베이킹(rebake)하는 거요.
하지만 위에서 말씀드렸듯이 이미 그렇게 해봤고, 오히려 문제가 더 복잡해진 것을 확인했습니다. (게다가 rebaking 후 '복원’도 작동하지 않고 되돌리기 어렵습니다.)
다른 도움이 될 만한 아이디어가 있을까요?
리맵핑을 수행할 때, 아래와 같은 경로가 동일한지 확인하셨나요?
discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
리맵핑 시 어떤 경로를 지정하셨나요?
이전 게시물에서 이미 예시를 드렸습니다. 그 방법으로 작동했습니다. 다른 방법은 알지 못합니다.
최대한 신중하게 다시 시도하겠습니다.
하지만 저는 커튼 뒤에 무슨 일이 일어나고 있는지 확인할 수 있는 방법을 찾고 있었습니다. 최소한 1개의 샘플 게시물만이라도, 어떤 게시물이 어떤 버킷에 매핑되어 있는지, 그리고 내가 얼마나 큰 혼란 속에 있는지 확인하고 싶었습니다.
어쨌든, 다시 시도해서 결과를 여기에 공유하겠습니다. 다시 한번 감사합니다.
이전에 지정하신 리맵 경로가 아래 명령어의 출력에 반영됩니다. 두 버킷이 모두 여전히 존재하므로, 이전 리맵이 실패했을 가능성이 있습니다. 어쨌든 이제 판단은 당신에게 달려 있습니다. 빠른 해결을 바랍니다. 행운을 빕니다.
./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)
감사합니다
당신보다 더 똑똑한 것은 아니지만, 방금 그 과정을 거쳤고 @Pravi의 도움으로 성공했습니다.
이 과정은 매우 쉽지는 않습니다. 잘못되면 정리하기가 매우 골치 아플 수 있으므로 텍스트와 링크에 각별히 주의하세요. 하지만 충분히 가능합니다.
public/uploads/default 폴더로 복사먼저 앱 컨테이너 안에 AWS CLI를 설치하세요.
cd /var/discourse
./launcher enter app
sudo apt install awscli
S3 ID와 비밀번호로 aws를 구성하세요(보통 간단합니다).
aws configure
그 다음 aws를 사용하여 버킷의 모든 내용을 public/uploads/default/로 복사하세요.
aws s3 sync s3://my-bucket-name/ public/uploads/default/
이것은 포럼에서 이미지를 하나 찾아 URL을 검사하는 것이 가장 쉽습니다. 실제 파일명까지의 모든 부분(마지막 / 포함)을 원합니다:
discourse remap //the-long-url-in-your-images-until-the-filename /uploads/default/
rake posts:rebake
exit
./launcher rebuild app
휴! 완료. 지금까지 어떤 문제도 겪지 않았습니다. 가서 테스트해 보세요!
잘하셨네요! 결국 제가 성공할 수 있게 도와준 단계들이 바로 그것들이라고 생각합니다. 하지만 저는 그렇게 잘 작동하지 않는 다양한 리맵을 많이 해보았거든요! 공식화된 지침을 갖게 되어 정말 좋습니다.