@pnoeric 사이트 가동 시간(uptime)에 대해 우려하고 계시므로, 지금까지 파악한 내용을 공유해 드리려 합니다.
앞서 언급했듯이 저는 라이브 환경에서 마이그레이션을 수행했습니다. 마이그레이션에 속도 제한(rate-limit)을 걸지 않으면, 서로의 활동을 사용자에게 알림을 보내는 등의 작업을 처리하는 큐가 막히고 사이트의 사용자 경험이 저하됩니다.
저는 약 500개의 비디오 게시글과 약 3만 개의 이미지 게시글을 마이그레이션했는데, 이를 완료하는 데 약 2주가 소요되었습니다.
제가 사용한 코드를 시도해 보시려면, 현재는 다음 주소에 있습니다.
이 파일을 다운로드하여 앱에 복사한 뒤, lib/tasks/uploads.rake의 현재 내용을 대체하시면 됩니다.
이 코드를 사용하면 다음과 같은 작업을 수행할 수 있습니다:
bin/rake uploads:batch_migrate_from_s3[100,1000]
이 명령은 업로드가 포함된 총 1,000개의 게시글만 대상으로 하며, 최대 100개까지 파일을 마이그레이션한 후 중단됩니다. 업로드 마이그레이션 후 게시글이 실제로 수정될 때마다, 다음 게시글을 시작하기 전에 큐가 비어 있을 때까지 대기합니다.
이 파일을 복사해 넣으면, 변경 사항을 되돌리기 전까지 향후 사이트 업데이트가 깨질 것입니다. 만족스럽게 작업이 끝난 후 이를 되돌리는 가장 쉬운 방법은 ./launcher rebuild app을 실행하는 것입니다(개발자로서 저는 git checkout HEAD lib/tasks/uploads.rake를 사용하여 변경 사항을 되돌립니다…).
Digital Ocean Spaces의 경우, 마이그레이션이 성공하기까지 몇 번 재시도해야 하는 경우가 있다는 것을 확인했습니다. 현재 스크립트에는 이런 일이 발생했을 때 경고 메시지가 표시되지 않아, 계속 실행하고 결과를 기다려야만 합니다. 해당 경우 오류를 출력하도록 하는 PR이 리뷰 대기 중이므로, 적어도 문제가 발생했음을 알 수 있도록 하겠습니다.
…
단순한 짧은 재시도 루프와 오류 메시지를 추가했는데, 재시도 루프가 문제를 해결하는 것으로 보입니다. 또한, 현재 규칙에 대한 검증이 과거 게시글의 원본(raw) 콘텐츠에 대해 수행되고 있었는데, 이는 마이그레이션을 중단시키고 재베이크(rebake)가 필요한 게시글을 조용히 남겨둘 수 있었습니다. 이 문제도 수정했습니다. 마이그레이션을 수행할 때, 현재 리뷰 대기 중인 제 PR에 포함된 커밋 중 하나인 검증 수정 사항을 반드시 포함해야 합니다.
…
제 지식 범위 내에서 마이그레이션을 완료했습니다. 제 PR에는 마이그레이션을 완료하는 데 사용한 모든 코드가 포함되어 있습니다. 아직 리뷰를 받지 못했습니다. 원하시면 Migrate_from_s3 problems 주소를 따라가 보시길 권합니다.