Quello che ho fatto in passato è usare PaperClip con Amazon S3 e CloudFront CDN per una consegna più rapida. PaperClip supporta lo storage S3 molto bene fuori dalla scatola: vedi la loro documentazione per le opzioni di configurazione dello storage S3 .
- Configura una distribuzione CloudFront per inoltrare le richieste di immagini al tuo bucket S3 e altre richieste di risorse statiche all'applicazione Ruby on Rails (in alternativa, puoi caricarle anche su S3, ma questo non rientra nell'ambito di questa domanda).
-
CNAME un dominio che controlli (come assets.example.com) per indicare la tua distribuzione CloudFront.
- Nella configurazione PaperClip, imposta
s3_host_alias: assets.example.com
. Ciò causerà la generazione di URL generati su risorse di immagini salvate per utilizzare l'host di distribuzione CloudFront.
- Nella configurazione di Ruby on Rails, puoi fare
config.action_controller.asset_host = http://assets.example.com
. Gli URL degli asset di Ruby on Rails utilizzeranno anche la tua distribuzione CloudFront, per la memorizzazione nella cache / una consegna più rapida.
Questo è piuttosto approssimativo, ma si spera che punti in direzione di alcune risorse utili. Certo, questa è solo una soluzione, ma è una di quelle che ha funzionato per me in una situazione in cui avevo a che fare con centinaia di migliaia di allegati di immagini nel database.
(Come possibile passaggio avanzato che potrebbe non essere necessario o utile per il tuo caso, puoi anche impostare più CNAME per la tua distribuzione CloudFront, come assets0.example.com
e assets1.example.com
. Sia paperclip s3_host_alias
e action_controller.asset_host
può quindi assumere lambda che ti consente di determinare in modo deterministico (in base alla risorsa) URL che utilizzano host diversi, per una migliore parallelizzazione se stai scaricando un gruppo di essi sulla stessa pagina, poiché i browser limiteranno le connessioni simultanee massime a lo stesso host.)