Pregunta

Estoy usando la gema rmagick para generar imágenes dinámicas desde un controlador. El controlador toma una identificación como parámetro, busca en un modelo, escribe texto sobre una imagen existente y la muestra.

He ejecutado algunos puntos de referencia comparando la generación para cada solicitud en lugar de escribir en el disco y usar send_data para generarlo si ya existe. No he notado mucha diferencia en las solicitudes / segundo entre estos dos métodos.

¿Existe alguna práctica recomendada para almacenar en caché la imagen o escribirla en el disco en lugar de generarla dinámicamente para cada solicitud? Una vez generadas, estas imágenes permanecerían en su mayoría estáticas, pero también me gustaría la opción de volver a generarlas después de un cierto intervalo de tiempo.

¿Fue útil?

Solución

La mejor práctica es almacenar en caché las imágenes generadas y permitir que el servidor web las sirva.

Use un servidor web como Apache o Nginx frente a su aplicación Rails, y asegúrese de escribir la imagen en una ubicación donde el servidor web pueda servirla. Entonces, si su ruta Rails se evalúa como /dynamic_images/3.png (que llama a dynamic_images_controller action show con id = 3 y format = png), escriba esa imagen en public / dynamic_images / 3.png y use send_file en el controlador para enviarla.

La próxima vez que se solicite ese archivo ( /dynamic_images/3.png ), el servidor web con mucho gusto lo servirá (en caché) y la aplicación Rails nunca será golpeada.

Para necesidades avanzadas, como volver a generar las imágenes y limpiar el código de su controlador, consulte el clip de papel gema.

Otros consejos

Solo una idea (nunca probada): ¿por qué no almacenar imágenes (especialmente las que se generan dinámicamente) con memache?

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

Debe colocar las imágenes en caché en dicho directorio desde donde serán atendidas por el servidor web. No desea utilizar send_data para esto, eso es demasiado lento. Además, es probable que desee ignorar ese directorio en su VCS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top