2013-11-27 28 views
1

我sidekiq运行在Heroku,做与用户的电子邮件等同步的很多sidekiq - 避免清算delayed_until工作

几乎每隔一段时间,我们得到以下错误:

Error R14 (Memory quota exceeded) 

为了对抗这个,我创建了一个由heroku调度器执行的rake任务。

rake任务将重新启动所有的DYNOS并刷新所有的sidekiq工作从Redis的与此代码:

Sidekiq.redis { |r| r.flushall } 

我有一个新的要求,使用户要安排一定的工作,以在未来像这样运行:

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

我是否正确地说上述代码示例中的flushall会刷新创建的任何计划作业?

如果是这样,我能做些什么来避免这种情况?

回答

0

当您发送redis FLUSHALL命令时,它将截断整个redis数据存储。这是一件危险的事情,可能不是你想要的。

这听起来像你想要做的是清除某些类型的排队工作,同时保留其他人。您需要刷新您使用的每个队列,最有可能只是default队列,除非你已经设置其他:

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

这将Redis的内删除队列,但保留预定作业,统计数据和其他数据在redis中。