Frage

Ich bin mit dem RMagick gem zur Erzeugung dynamische Bilder von einem Controller. Die Steuerung nimmt eine ID als param, ein auf einem Modell zu sehen ist, schreibt Text über ein vorhandenes Bild und gibt es.

Ich habe einige Benchmarks führen Sie es für jede Anforderung im Vergleich Schreiben auf die Festplatte zu vergleichen Erzeugung und Verwendung von send_data um es auszugeben, wenn es bereits vorhanden ist. Ich habe nicht viel Unterschied in Anfragen / Sekunde zwischen diesen beiden Methoden bemerkt.

Gibt es eine bewährte Methode, um das Bild für das Caching oder auf die Festplatte zu schreiben, anstatt sie zu erzeugen, dynamisch für jede Anforderung? Einmal erzeugt, würden diese Bilder meist statisch bleiben, aber ich würde wie die Option auch wieder erzeugt sie nach einem bestimmten Zeitintervall.

War es hilfreich?

Lösung

Die beste Vorgehensweise ist es, erzeugen Bilder Cache und ermöglicht es dem Webserver sie zu dienen.

Verwenden Sie einen Webserver wie Apache oder Nginx vor Ihrer Rails-Anwendung, und stellen Sie sicher, dass Sie das Bild an einen Ort schreiben, wo der Webserver es dienen kann. Also, wenn Ihr Rails Weg /dynamic_images/3.png auswertet (das nennt dynamic_images_controller Aktion show mit id = 3 und format = png), schreiben Sie das Bild in public/dynamic_images/3.png und verwendet send_file in der Steuerung um sie zu senden.

Das nächste Mal die Datei angefordert wird (/dynamic_images/3.png), wird der Webserver gerne sie dient (gecached) und die Rails-Anwendung wird nie getroffen zu werden.

Für fortgeschrittene Bedürfnisse, wie die Bilder neu zu erzeugen, und der Controller-Code Reinigung, haben einen Blick auf die Büroklammer gem.

Andere Tipps

Nur eine Idee (nie versucht): warum nicht speichern Bilder (vor allem diejenigen, die dynamisch erzeugt werden) mit memache

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

Sie sollten im Cache gespeicherten Bilder setzen in ein solches Verzeichnis von wo sie vom Web-Server bedient werden. Sie wollen nicht send_data für diesen Einsatz - das ist zu langsam. Auch Sie werden wahrscheinlich das Verzeichnis in Ihrem VCS ignoriert werden sollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top