Вопрос

Я использую rmagick gem для генерации динамических изображений с контроллера.Контроллер принимает идентификатор в качестве параметра, выполняет поиск по модели, записывает текст поверх существующего изображения и выводит его.

Я провел несколько тестов, сравнивая генерацию его для каждого запроса с записью на диск и использованием send_data вывести его, если он уже существует.Я не заметил большой разницы в количестве запросов в секунду между этими двумя методами.

Существует ли наилучшая практика для кэширования изображения или записи его на диск вместо того, чтобы генерировать его динамически для каждого запроса?После создания эти изображения оставались бы в основном статичными, но я также хотел бы иметь возможность повторно сгенерировать их через определенный интервал времени.

Это было полезно?

Решение

Лучше всего кэшировать сгенерированные изображения и позволять веб-серверу обслуживать их.

Используйте веб-сервер, такой как Apache или Nginx, перед вашим приложением Rails и убедитесь, что вы записываете изображение в такое место, где веб-сервер может его обслуживать.Итак, если ваш маршрут Rails оценивается как /dynamic_images/3.png (который вызывает dynamic_images_controller Экшен show с идентификатором = 3 и форматом = png), запишите это изображение в public/dynamic_images/3.png и использовать send_file в контроллере, чтобы отправить его.

При следующем запросе этого файла (/dynamic_images/3.png), веб-сервер с радостью будет обслуживать его (кэшировать), и приложение Rails никогда не будет запущено.

Для дополнительных нужд, таких как повторная генерация изображений и очистка кода вашего контроллера, взгляните на скрепка для бумаги драгоценный камень.

Другие советы

Просто идея (никогда не пробовал):почему бы не хранить изображения (особенно те, которые генерируются динамически) с помощью memache?

Rails.кэш.запись("MY_IMAGE", изображение)

Вы должны поместить кэшированные изображения в такой каталог, откуда они будут обслуживаться веб-сервером.Вы не хотите использовать send_data для этого - это слишком медленно.Кроме того, вы, вероятно, захотите игнорировать этот каталог в вашем VCS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top