Stop using Amazon s3 for uploads

몇 가지 실험을 해본 결과, ‘remap’ 작업을 수행하기 전에도 일부 게시글에 이미지가 표시되지 않는 것을 발견했습니다.

대신 이미지의 작은 아이콘이 표시되며, 마우스를 올리면 이미지 경로가 보이고, 클릭해야만 이미지가 표시됩니다.

또한 3점 메뉴에서 'Rebuild Html’을 실행하거나 컨테이너 내부에서 ‘rebake’ 작업을 수행하면 해당 아이콘도 사라지고, 그 자리에 흰색 공간(이미지 플레이스홀더)이 나타납니다.

부탁드립니다. 어떻게 해결해야 하는지 안내해 주시겠습니까?

remap을 수행하지 않았고 S3 버킷이 여전히 정상적으로 작동 중이라면, 이전과 달라진 것이 없어야 합니다. 이 문제를 시작하기 전에 해당 이미지가 정상적으로 작동하고 있었나요?

이론적으로 S3 버킷을 끄거나 remap을 잘못 수행하는 경우에만 해당 이미지 파일과의 연결이 끊겨야 합니다.

감사합니다.
이미지 아이콘이 /bucket/uploads/optimized/folder/… 경로를 표시하고 있음을 발견했습니다. (해당 경로에 이미지가 없으므로 이미지는 표시되지 않고 아이콘만 보입니다.)

하지만 해당 이미지 아이콘을 클릭하면 이미지는 ‘Orig’ 폴더, 즉 /bucket/uploads/original/…에서 제공/표시됩니다.

단일 이미지에 두 가지 다른 경로가 어떻게 저장되어 있는지 모르겠습니다?!?

어쨌든, 이제 문제는 ‘optimized’ 아래에 잘못된 경로가 매핑된 게시물을 어떻게 찾을 것인지로 좁혀졌습니다. 이렇게 하면 ‘Original’ 아래에 있는 올바른 경로로 해당 주소들을 수정/리맵할 수 있을 것입니다.

@nathank, @Pravi, @itsbhanusharma 님들께 감사합니다. 제가 서로 다른 문제/상황을 혼동하고 있었기 때문에, 현재 저의 상황은 다음과 같습니다:

  1. 일부 게시글에는 업로드한 이미지가 표시되지 않고, 마우스를 올려놓았을 때 잘못된 버킷 URL/주소가 포함된 작은 아이콘이 표시됩니다. 또는, 일부 게시글은 그 작은 아이콘을 클릭해야만 올바른 이미지와 올바른 버킷 경로가 표시됩니다. 그리고 또 다른 게시글들의 이미지는 아무것도 표시되지 않고, 그저 빈 흰색 공간만 보입니다.
    만약 remap 작업(remap wrongbucketurl correctbucketurl)을 실행했다면, 샘플링한 한 게시글에서 처음에는 작은 아이콘이 올바른 이미지로 대체되어 기뻤지만, 이튿날에는 그 이미지가 완전히 사라져 아이콘조차 보이지 않고 대신 흰색 공간만 나타나는 것을 발견했습니다. 그래서 저는 웹사이트를 전날 상태로 복원해야 했습니다.

  2. 이 명령어를 실행했을 때 결과는 다음과 같았습니다:

# rake posts:missing_uploads
Looking for missing uploads on: default

19 post uploads are missing.

19 uploads are missing.
6 of 7792 posts are affected.

아직 로컬로 마이그레이션을 하지 않았습니다. 사이트를 확인해 보니 s3 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

이 과정을 여러 가지 변형으로 수십 번 시도해 보았지만 여전히 작동하지 않습니다.

관리 부서에서 공개 접근이 가능한 S3 버킷을 원하지 않는다고 결정했기 때문에, 이미지를 S3로 표시하는 대신 로컬로 되돌려야 합니다.

처음에는 깨진 링크를 검사하여 리맵(remap)에 사용할 값을 파악했고(그렇게 생각했는데), 이제 일부 이미지는 정상적으로 표시됩니다. 하지만 대부분, 90% 이상은 작동하지 않습니다. S3 링크가 깨져 있을 때는 적어도 링크를 검사해서 무엇이 잘못되었는지 파악할 수 있었는데, 지금은 다음 내용만 표시됩니다:

link

이 이미지들이 실패하는 원인이 무엇인지 아는 분이 있을까요? 며칠째 이 문제로 고생하고 있습니다. a) 되돌려 올 수 있는 방법이 없다는 것과, b) 되돌려 올 수 없는 상황에서 누군가(저는 아닙니다) 우리를 이주(migrate)시켰다는 사실이 정말 믿기지가 않습니다.

정리하자면, @nathank 님이 설명한 과정을 따랐습니다. 리맵 단계의 경로가 보편적인지, 아니면 디렉터리 구조에 따라 달라지는지(우리의 디렉터리에는 S3 동기화 단계를 통해 성공적으로 복사된 여러 하위 디렉터리가 있습니다) 명확하지 않아서, 경로를 살짝씩 바꿔가며 여러 번 시도해 보았습니다.

머리를 쥐어뜯을 지경이므로 도움을 정말 간절히 부탁드립니다.

원하시는 작업은 숨겨진 include_s3_uploads_in_backups 옵션을 활성화한 뒤 백업을 생성하고 이를 복원하는 것인 것 같습니다(저라면 먼저 새로운 테스트 서버에서 시도하겠습니다). 이는 CDCK 고객이 구독을 해지할 때 수행되는 절차이며, 이렇게 생성된 백업은 새 셀프호스트드 사이트로 문제없이 복원됩니다.

제이, 답변해 주셔서 감사합니다. 그리고 무례한 질문일 수 있는데, 이걸 어떻게 켜야 할까요?

죄송합니다. 다음과 같은 명령을 실행해 주세요.

./launcher enter app
rails c
SiteSettings.include_s3_uploads_in_backups=true
exit
exit

그렇게 해보았지만 다음과 같은 오류가 발생했습니다:

NoMethodError: undefined method include_s3_uploads_in_backups=' for SiteSettings:Module from (pry):1:in pry’

그제서야 S3 업로드를 다시 켜야 할지도 모르겠다는 생각이 들었습니다. 저는 S3 업로드를 꺼둔 상태였거든요. 하지만 여전히 같은 오류가 발생했습니다.

우리는 두 개의 컨테이너를 사용하는데, 저는 web_only 컨테이너에서 이 명령을 실행하고 있습니다. data 컨테이너에서는 Rails 명령을 찾을 수 없으므로, 이것이 올바른 접근 방식이라고 가정합니다.

명령어가 다음과 같았어야 할 것 같습니다:

SiteSetting.include_s3_uploads_in_backups=true

해당 명령어를 실행한 후 새로운 백업을 생성했습니다. 해당 백업에서 복원했는데도 변화가 없습니다. 여전히 대부분의 이미지가 위에서 언급한 깨진 아이콘으로 표시됩니다. 두 컨테이너를 모두 재구축해 보았지만 역시 차이가 없었습니다.

백업 zip 파일을 다운로드해서 확인해 보면 해당 파일들이 확실히 모두 존재하며, 복원 후에도 파일 시스템에서 볼 수 있습니다. 하지만 Discourse는 그들을 인식하고 표시하기를 거부합니다.

기록을 남기기 위해 말씀드리자면, 결국 이 문제를 해결했습니다. 처음부터 다시 시작했는데요(즉, 인스턴스 스냅샷에서 시작), 최종적으로 작동했던 과정은 다음과 같다고 확신합니다:

  • rails 콘솔에서 SiteSetting.include_s3_uploads_in_backups=true를 실행
  • 새 백업 생성
  • 해당 백업에서 복원
  • discourse remap을 사용하여 다양한 S3 파일 위치의 참조를 로컬 위치로 업데이트
  • 게시물을 다시 베이킹(rebake)하고 두 개의 docker 컨테이너를 다시 빌드

여기서 올바른 방향으로 이끌어 주신 @pfaffman 님께 감사드립니다.

수정

이것을 언급해도 될 것 같습니다. 이전 게시글 이후에, 우리 토픽 중 여섯 개의 게시글에서 이미지가 여전히 깨져 있다는 사실을 깨달았습니다(대부분은 이제 정상적으로 보입니다).

해당 게시글들은 우리에서 가장 오래된 여섯 개이고, 모든 원본 이미지가 다른 모든 이미지와 다른 S3 URL을 사용하고 있었습니다. 분명히 우연이 아닙니다. 그래서 uploads/default/original/1X 디렉토리에 해당 파일들이 모두 있는지 확인했는데, 실제로 모두 있었습니다. 그런 다음 이 고유한 S3 URL을 사용하여 remap 명령을 실행했는데, 올바른 수의 게시글이 수정된 것처럼 보였습니다. 그 후 다시 베이킹하고 컨테이너를 다시 빌드했지만, 이 토픽들은 여전히 깨져 있습니다. 왜 소수의 게시글만 이런 방식으로 실패하는지 아시는 분 계신가요?