2013-07-26 3 views
5

mongo의 gridfs에 이미지를 저장하는 방법과 백그라운드에서 S3에 비동기 업로드 한 후 이미지를 저장하는 방법이 있습니까?CarrierWave gridfs에 이미지를 저장하고 배경에 업로드 s3

아마도 업 로더를 연결할 수 있습니까?

다음 문제 : 사용 된 여러 개의 서버, 따라서 하드 드라이브 이미지 및 실행중인 백그라운드 프로세스에 다른 서버에 저장 될 수 있습니다.

또한 입니다. 1. s3 에 업로드 할 때 gridfs에서 제거해야합니다. 2. 해당 엔티티가 삭제되면 자동으로 s3에서 제거되어야합니다.

감사합니다.

+0

확실하지 않지만 [this] (http://stackoverflow.com/questions/17871568/rails-3-paperclip-can-i-store-images-both-on-s3-locally/17893929#17893929) 도움말 – Viren

답변

0

임시 변수를 사용하여 gridfs에 저장하고 Worker (this 참조)를 사용하여 gridfs에서 s3으로 비동기 업로드를 수행했습니다.

희망이 도움이 될 것입니다, 감사합니다.

1

배포 아키텍처는 어떤 모양입니까? 나는 당신이 "다중 서버"라고 말할 때 약간 혼란 스럽습니다 - 여러 개의 mongod 인스턴스를 의미합니까? 또한 요구 사항을 지정할 때 약간 혼란 스럽습니다. 요구 사항 1에 따라 S3에 업로드하는 경우 gridfs 파일을 제거해야합니다. 그러나 요구 사항에 따라 S3와 Gridfs 모두에 존재할 수 없으므로 요구 사항 2는 첫 번째 모순과 모순되는 것처럼 보입니다. 즉, 처음에는 gridfs에 존재하지 않아야합니다. Gridfs와 S3 모두에서 일부 파일을 보존하고 있습니까?

복제본 세트 또는 샤드 드 클러스터에서 실행중인 경우 gridfs 컬렉션에 tailable cursor을 만들 수 있습니다 (권장하지 않지만 단일 노드에서도이 작업을 수행 할 수 있습니다). 삽입 작업 ('op'처럼 보일 것입니다 : 'i')을 볼 때 스크립트를 실행하거나 응용 프로그램에서 gridfs에서 파일을 가져 와서 해당 파일을 s3으로 푸시 할 수 있습니다. 마찬가지로 삭제 작업 ('op': 'd')이 표시되면 s3에서 파일을 간단히 삭제할 수 있습니다.

커서의 장점은 비동기 작업을 허용한다는 것입니다. 다른 프로세스가 다른 서버의 oplog를 모니터링하고 적절한 작업을 수행 할 수 있습니다.

+0

일부 응용 프로그램 서버가 있습니다. 다음 아이디어 : 먼저 gridfs (로컬 파일 시스템이 아님)와 s3 (gridfs에서)로 업로드하십시오. Resque를 통해 백그라운드에서 s3에 업로드하십시오. Resque는 파일이 들어있는 컴퓨터가 아닌 다른 컴퓨터에서 실행될 수 있기 때문에 파일 시스템은이 경우 작동하지 않습니다. 따라서 gridfs는 전역으로 액세스 할 수있는 스토리지와 같습니다. –

관련 문제