Я работаю над приложением (развернутым в Heroku), которое разделено на общедоступный и административный разделы. Одной из основных задач в разделе администратора (управляемом несколькими пользователями) является загрузка изображений. Эти изображения могут быть очень большими и должны быть обработаны до нескольких размеров (некоторые очень большие). Я обрабатываю загрузку изображения на стороне клиента, загружаю его непосредственно на S3, а затем обрабатываю обработку изображения с помощью Sidekiq. Это позволяет избежать блокировки веб-дино и проблем с тайм-аутами Unicorn.
Проблема в том, что это означает, что мне нужен постоянно работающий рабочий дино, даже несмотря на то, что администраторы часто загружают только пару изображений в день (хотя они могут загружать много). Моей первоначальной мыслью было использовать Hirefire, но он проверяет только очередь каждую минуту (хотя в моих тестах это кажется ближе к каждым 3 минутам). У администратора есть задачи, которые нужно выполнить после обработки изображения, поэтому мне нужно обработать его как можно быстрее, поэтому такая задержка (в сочетании со временем обработки) недопустима.
Итак, я ищу решение, которое делает следующее:
- Запускает рабочий динамометр для обработки любых заданий, если это необходимо, как только задание будет добавлено.
- Запускает рабочий динамометр, когда очередь пуста.
Hirefire помогает мне на полпути (я не возражаю против задержки, чтобы раскрутить динамометрический стенд вниз).
Какие у меня есть варианты?