2013-07-26 10 views
5

C'è un modo per salvare l'immagine nella griglia di mongo e dopo il caricamento asincrono su S3 in background?CarrierWave salva l'immagine in gridfs e carica in background s3

Forse è possibile collegare gli uploader?

Il problema in seguito: Più server utilizzati, quindi, salvati nell'immagine del disco rigido e il processo in background in esecuzione può essere su server diversi.

1. deve essere rimosso dalla griglia quando caricato su s3 2. deve rimuovere automaticamente da s3 quando l'entità corrispondente viene distrutta.

Grazie.

+0

Non sono sicuro, ma vedi se [questo] (http://stackoverflow.com/questions/17871568/rails-3-paperclip-can-i-store-images-both-on-s3-locally/17893929#17893929) help – Viren

risposta

0

Ho utilizzato la variabile temporanea per memorizzare su gridfs e reso Worker (vedere this) per eseguire il caricamento asincrono da gridfs a s3.

Spero che questo possa aiutare qualcuno, grazie.

1

Che aspetto ha l'architettura di distribuzione? Sono un po 'confuso quando dici "server multipli" - intendi più istanze mongod? Inoltre, è un po 'di confusione quando si specificano i requisiti. In base al requisito 1, se si carica su S3, il file gridfs deve essere rimosso. Tuttavia, in base alle vostre esigenze, non può esistere sia in S3 che in Gridfs, quindi il requisito 2 sembra essere in contraddizione con il primo, cioè, non dovrebbe esistere in gridfs in primo luogo. Stai conservando alcuni file sia su Gridfs che su S3?

Se si sta eseguendo un set di repliche o un cluster più grande, è possibile creare un tailable cursor nella raccolta griglia (è possibile farlo anche su un singolo nodo, sebbene non sia consigliato). Quando vedi un'operazione di inserimento (sembrerà "op": "i") potresti eseguire uno script o fare qualcosa nella tua applicazione per prendere il file da gridfs e spingere il file appropriato in s3. Allo stesso modo, quando vedi un'operazione di cancellazione ('op': 'd') potresti cancellare in modo sommario il file da s3.

La bellezza di un cursore tessibile è che consente operazioni asincrone: è possibile avere un altro processo per monitorare l'oplog su un server diverso ed eseguire le azioni appropriate.

+0

Ho alcuni server applicazioni. Idea successiva: carica prima su gridfs (non sul filesystem locale) e dopo su s3 (da gridfs). Carica su s3 in background tramite Resque. Il filesystem non funziona in questo caso perché Resque può girare su un'altra macchina, non su quella che contiene il file. Quindi, gridfs è come l'archiviazione accessibile globale. –

Problemi correlati