Domanda

Sto usando la gemma di rmagick per generare immagini dinamiche da un controller. Il controller prende un id come parametro, cerca un modello, scrive il testo su un'immagine esistente e lo emette.

Ho eseguito alcuni benchmark confrontandoli generandolo per ogni richiesta anziché scrivendo su disco e usando send_data per emetterlo se esiste già. Non ho notato molta differenza nelle richieste / secondo tra questi due metodi.

Esiste una procedura ottimale per memorizzare nella cache l'immagine o scriverla sul disco invece di generarla dinamicamente per ogni richiesta? Una volta generate, queste immagini rimarrebbero per lo più statiche ma vorrei anche l'opzione di rigenerarle dopo un certo intervallo di tempo.

È stato utile?

Soluzione

La migliore pratica è memorizzare nella cache le immagini generate e consentire al server web di servirle.

Usa un server web come Apache o Nginx davanti all'app Rails e assicurati di scrivere l'immagine in una posizione in cui il server web può servirla. Pertanto, se il percorso di Rails viene valutato in /dynamic_images/3.png (che chiama dynamic_images_controller action show con id = 3 e format = png), scrivi quell'immagine in public / dynamic_images / 3.png e usa send_file nel controller per inviarla.

Alla successiva richiesta del file ( /dynamic_images/3.png ), il server web lo servirà volentieri (memorizzato nella cache) e l'app Rails non verrà mai colpita.

Per esigenze avanzate, come la rigenerazione delle immagini e la ripulitura del codice del controller, dai un'occhiata alla graffetta gemma.

Altri suggerimenti

Solo un'idea (mai provata): perché non archiviare immagini (specialmente quelle generate dinamicamente) con memache?

Rails.cache.write (" MY_IMAGE " ;, immagine)

Dovresti mettere le immagini memorizzate nella cache in una tale directory da dove verranno servite dal web server. Non vuoi usare send_data per questo - è troppo lento. Inoltre, probabilmente vorrai ignorare quella directory nel tuo VCS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top