2012-11-27 15 views
5

Come faccio a caricare i caricamenti di immagini Paperclip su un'app Rails in esecuzione su 8 computer (bilanciati a carico)?Graffetta + Rotaie con macchine con carico bilanciato

Un utente può caricare un'immagine nell'app. L'immagine è memorizzata su una delle macchine. L'utente in seguito richiede l'immagine, ma non viene trovata, perché viene richiesta da un'altra macchina.

Qual è la soluzione alternativa per questo tipo di problema? Non posso utilizzare AWS o qualsiasi servizio cloud; le immagini devono essere archiviate internamente.

Grazie.

+0

Se non è possibile utilizzare AWS, dovrete o mettere le immagini in un database o la soluzione proprio archiviazione di file. La loro memorizzazione sui server delle applicazioni è un no-go. Se perdi una di quelle macchine hai perso le immagini. –

risposta

8

Una soluzione è usare NFS per montare una cartella condivisa che sarà la radice del tuo public/system o di qualsiasi altra cosa tu abbia chiamato la tua cartella contenente immagini a graffetta.

Ci sono alcune cose da prendere in considerazione per far funzionare tutto però:

  • Utilizza un server dedicato che conterrà solo le attività, in questo modo il disco rigido (s) sono dedicati a servire le vostre immagini graffetta
  • NFS può essere costoso. Usalo per scrivere file dai tuoi server delle app solo al tuo server Asset. Dovrai configurare il tuo bilanciamento del carico o il proxy inverso o il server web per recuperare direttamente tutte le immagini dal server delle risorse, senza chiedere ad un server delle applicazioni di farlo su NFS.
  • un sistema RAID è consigliato sul server di proprietà, naturalmente
  • si consiglia un secondo server di risorse con le stesse specifiche. Puoi farlo funzionare come server di backup e sincronizzare regolarmente le tue immagini a graffetta. Se il server delle risorse master va mai giù, sarai in grado di passare a questo.
  • Quando si monta la cartella NFS condivisa, utilizzare l'opzione soft e montarla tramite una connessione di rete locale ad alta velocità, ad esempio: mount -o soft 10.0.0.1:/export/shared_image_folder. Se non si specifica l'opzione soft e il server risorse non funziona, le istanze di Ruby continueranno ad attendere che il server salga. Tutto sarà bloccato e il sito Web guarderà in basso. Ho imparato questo nel modo più duro ...

Queste sono le linee guida generali per utilizzare NFS. Lo sto usando su un sito di produzione piuttosto grande con centinaia di migliaia di immagini e funziona perfettamente per me.

+0

Come posso istruire Paperclip a scrivere file nella cartella montata condivisa, da machine1 ad esempio? – alste

+0

Dovrai 'mount' la cartella NFS condivisa. In Linux, 'mount' proverà ad usare NFS per montare una cartella di rete, modificherà la mia risposta. Ovviamente dovrai prima configurare il tuo server nfs e installare i pacchetti richiesti in base alla tua (o alle) distri –

1

Se non si desidera utilizzare una condivisione file come NFS, è possibile memorizzare le immagini nel database. Qui è una gemma che fornisce un tipo di archiviazione per :database Paperclip:

https://github.com/softace/paperclip_database

Problemi correlati