Kiến trúc triển khai của bạn trông như thế nào? Tôi hơi bối rối khi bạn nói "nhiều máy chủ" - bạn có nghĩa là nhiều trường hợp mongod? Ngoài ra, nó là một chút bối rối khi bạn chỉ định yêu cầu của bạn. Theo yêu cầu 1, nếu bạn tải lên S3, thì tệp gridfs sẽ bị xóa. Tuy nhiên, theo yêu cầu của bạn, nó không thể tồn tại trong cả S3 và Gridfs, do đó yêu cầu 2 dường như là mâu thuẫn với cái đầu tiên, tức là, nó không nên tồn tại trong gridfs ngay từ đầu. Bạn đang bảo quản một số tệp trên cả Gridfs và S3?
Nếu bạn đang chạy trong một tập bản sao hoặc cụm phân đoạn, bạn có thể tạo tailable cursor trên bộ sưu tập gridfs của mình (bạn cũng có thể thực hiện việc này trên một nút duy nhất, mặc dù nó không được khuyến nghị). Khi bạn nhìn thấy một thao tác chèn (sẽ giống như 'op': 'i'), bạn có thể thực thi một kịch bản hoặc làm một cái gì đó trong ứng dụng của bạn để lấy tệp từ gridfs và đẩy tệp thích hợp vào s3. Tương tự, khi bạn thấy thao tác xóa ('op': 'd'), bạn có thể xóa tập tin khỏi s3.
Vẻ đẹp của con trỏ tailable là nó cho phép các thao tác không đồng bộ - bạn có thể có một quy trình khác giám sát oplog trên một máy chủ khác và thực hiện các hành động thích hợp.
Nguồn
2013-08-01 21:20:02
Không chắc chắn nhưng hãy xem liệu [this] (http://stackoverflow.com/questions/17871568/rails-3-paperclip-can-i-store-images-both-on-s3-locally/17893929#17893929) help – Viren