2013-11-27 2 views
1

Я имею sidekiq работают на Heroku, что делает много синхронизации с электронной почтой пользователя и т.д.sidekiq - избежать очисток delayed_until рабочих мест

Каждой так часто, мы получали следующее сообщение об ошибке:

Error R14 (Memory quota exceeded) 

Чтобы противостоять это, я создал задачу rake, которая выполняется планировщиком heroku.

Задача рек перезапускает все динамометрические стенды и смывает все рабочие места sidekiq из Redis с этим кодом:

Sidekiq.redis { |r| r.flushall } 

У меня есть новое требование, в результате чего пользователей хотят планировать определенные рабочие места для запуска в будущем, как это:

DeliverEmail.delay_until(email.send_time).perform_async(email.id) 

Am Я прав, говоря, что FlushAll из приведенного выше примера кода будет смывать любые запланированные задания, которые создаются?

Если это так, есть ли что-нибудь, что я могу сделать, чтобы этого избежать?

ответ

0

Когда вы отправляете команду redis FLUSHALL, она обрезает весь рестарт данных redis. Это опасная вещь и, вероятно, не то, что вы хотите.

Похоже, что вы хотите сделать, это очистить некоторые виды заданной работы, сохранив при этом другие. Вам нужно будет промывать каждую очередь вы используете, скорее всего, только default очереди, если вы не имеете установки других:

Sidekiq::Queue.new('default').clear 

Это удалит очередь в Redis, но сохранить ваши запланированные задания, статистические данные и другие данные внутри redis.

Смежные вопросы