2013-07-26 15 views
5

Czy istnieje sposób, aby zapisać obraz do siatek fs i po asynchronicznym przesyłanie do S3 w tle?CarrierWave zapisać obraz do gridfs i przesłać w tle s3

Być może możliwe jest łączenie się z użytkownikami?

Problem w następnej kolejności: Wiele serwerów używanych, a zatem zapisanych na obrazie dysku twardego i działających w tle procesów, może znajdować się na różnych serwerach.

Również 1. powinien zostać usunięty z gridfs po przesłaniu do s3 2. powinien automatycznie usunąć z s3 po zniszczeniu odpowiadającego obiektu.

Dzięki.

+0

Nie jestem pewien, ale zobacz, czy [to] (http://stackoverflow.com/questions/17871568/rails-3-paperclip-can-i-store-images-both-on-s3-locally/17893929#17893929) help – Viren

Odpowiedz

0

Użyłem zmiennej tymczasowej do przechowania do gridfs i wykonałem Worker (patrz this), aby wykonać asynchroniczne przesyłanie z gridfs do s3.

Mam nadzieję, że to pomoże komuś, dzięki.

1

Jak wygląda Twoja architektura wdrażania? Jestem nieco zdezorientowany, kiedy mówisz "wiele serwerów" - masz na myśli wiele instancji mongo? Poza tym jest to trochę mylące, gdy określasz swoje wymagania. Zgodnie z wymogiem 1, jeśli przesyłasz do S3, plik gridfs powinien zostać usunięty. Jednak zgodnie z twoimi wymaganiami, nie może istnieć zarówno w S3, jak i Gridfs, więc wymaganie 2 wydaje się być sprzeczne z pierwszym, tj. Nie powinno istnieć w gridfs w pierwszej kolejności. Czy zachowujesz niektóre pliki na Gridfach i S3?

Jeśli używasz zestawu replik lub klastra z sharded, możesz utworzyć tailable cursor w kolekcji gridfs (możesz to zrobić również na pojedynczym węźle, chociaż nie jest to zalecane). Kiedy zobaczysz operację wstawiania (będzie wyglądać jak "op": "i"), możesz wykonać skrypt lub zrobić coś w swojej aplikacji, aby pobrać plik z gridfs i przesłać odpowiedni plik do s3. Podobnie, gdy zobaczysz operację usuwania ("op": "d"), możesz skasować plik z s3.

Piękno kursora, który można ustawić w trybie ciągłym, polega na tym, że pozwala na operacje asynchroniczne - można mieć inny proces monitorowania oploku na innym serwerze i wykonywania odpowiednich działań.

+0

Mam kilka serwerów aplikacji. Idea next: prześlij najpierw do gridfs (nie lokalnego systemu plików) i po s3 (z gridfs). Przesyłanie do s3 odbywa się w tle za pośrednictwem narzędzia Resque. System plików nie działa w tym przypadku, ponieważ Resque może działać na innym komputerze, a nie na tym, który zawiera plik. Tak więc gridfs jest podobną do globalnej dostępnej pamięci. –

Powiązane problemy