Question

J'utilise la gemme rmagick pour générer des images dynamiques à partir d'un contrôleur. Le contrôleur prend un id en tant que paramètre, effectue une recherche sur un modèle, écrit du texte sur une image existante et le génère.

J'ai effectué quelques tests comparant sa génération pour chaque demande par rapport à son écriture sur le disque et à l'aide de send_data pour le générer s'il existait déjà. Je n'ai pas remarqué beaucoup de différence de requêtes / seconde entre ces deux méthodes.

Existe-t-il une bonne pratique pour mettre en cache l'image ou l'écrire sur le disque au lieu de la générer de manière dynamique pour chaque demande? Une fois générées, ces images resteraient essentiellement statiques, mais j'aimerais également pouvoir les générer à nouveau après un certain laps de temps.

Était-ce utile?

La solution

La meilleure pratique consiste à mettre en cache les images générées et à permettre au serveur Web de les diffuser.

Utilisez un serveur Web tel qu'Apache ou Nginx devant votre application Rails et assurez-vous d'écrire l'image à un emplacement où le serveur Web peut la servir. Donc, si votre route Rails est évaluée à /dynamic_images/3.png (qui appelle l'action dynamic_images_controller , show avec id = 3 et format = png), écrivez cette image dans public / dynamic_images / 3.png et utilisez send_file dans le contrôleur pour l'envoyer.

La prochaine fois que ce fichier sera demandé ( /dynamic_images/3.png ), le serveur Web le servira volontiers (mis en cache) et l'application Rails ne sera jamais touchée.

Pour des besoins avancés, tels que la régénération des images et le nettoyage du code de votre contrôleur, consultez le paperclip. bijou.

Autres conseils

Juste une idée (jamais essayée): pourquoi ne pas stocker des images (surtout celles qui sont générées dynamiquement) avec memache?

Rails.cache.write ("MY_IMAGE", image)

Vous devez placer les images en cache dans un tel répertoire à partir duquel elles seront servies par le serveur Web. Vous ne voulez pas utiliser send_data pour cela - c'est trop lent. De plus, vous voudrez probablement ignorer ce répertoire dans votre VCS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top