Нужно обязательно синхронизировать время. Нужно на все сервера установить ntp, чтобы часы постоянно синхронизировались с любым доступным сервером.

Это нужно для того, чтобы не повторить моей ошибки. Вот код:

my_model.save
MyWorker.perform_in(5.minutes, my_model.id)

Всё выглядит обычным и правильным. Через 5 минут после сохранения должна запуститься джоба и что-то сделать. Но в логах sidekiq я заметил, что слишком часто воркер не находил MyModel с нужным id. Есть известная проблема, что sidekiq настолько быстрый, что запускается до тех пор, пока не закоммитится транзакция. Но ведь вряд ли она висит 5 минут?

Конечно нет. Просто в моем случае на сервере, исполняющем код, время на 7 минут отставало от сервера с sidekiq, соответственно джоба моментально выполнялась, не ожидая 5 минут.


comments powered by HyperComments