Rails 8.0, два сервера приложения. Кроны сейчас через whenever, и чистка корзин настроена только на одном сервере, потому что на обоих отработала бы дважды. Хотим перенести всё в recurring-задачи Solid Queue:
production:
cleanup_carts:
class: CleanupCartsJob
schedule: every day at 3am
Но планировщик будет запущен на обоих серверах. Не получу ли я ту же двойную чистку?
Не получите. Каждый запуск recurring-задачи планировщик записывает в отдельную таблицу с уникальным индексом по ключу задачи и времени запуска, в той же транзакции, что и постановку джобы. Второй планировщик пытается вставить ту же пару, упирается в уникальность и молча пропускает. Мы так живём на трёх серверах, двойных запусков не было ни разу. Но саму джобу чистки я бы всё равно делал идемпотентной, на случай ручного запуска.
Перенесли. Неделю смотрела в solid_queue_recurring_executions: каждая задача раз в сутки, без дублей. whenever удалили.