如何摧毁雷克斯工人入职的工作?

时间:2011-05-04 08:57:33

标签: ruby-on-rails-3 scheduled-tasks redis resque

我在rails-3项目上使用Resque来处理计划每5分钟运行一次的作业。我最近做了一些事情,滚动了这些工作的创造,堆栈已经打了1000多个工作。我修复了导致许多作业排队的问题,现在我遇到的问题是错误创建的作业仍然存在,因此将作业添加到具有1000多个作业的队列中变得很难测试。 我似乎无法阻止这些工作。我尝试使用flushall命令从redis-cli中删除队列,但它不起作用。我错过了什么吗?因为我似乎无法找到摆脱这些工作的方法。

7 个答案:

答案 0 :(得分:61)

根据上述答案,如果您需要清除所有队列,可以使用以下内容:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }

答案 1 :(得分:48)

如果弹出一个rails控制台,则可以运行此代码来清除队列:

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"

答案 2 :(得分:35)

Resque已经有了执行此操作的方法 - 尝试Resque.remove_queue(queue_name)(请参阅文档here)。在内部它执行Resque.redis.del(),但它也进行其他清理,并且通过使用api方法(而不是对resque如何工作做出假设),你将更加面向未来。

答案 3 :(得分:14)

更新了用于清算的佣金任务(根据最新的redis命令更改):https://gist.github.com/1228863

答案 4 :(得分:13)

这就是现在有效的方法:

Resque.remove_queue("...")

答案 5 :(得分:4)

输入redis控制台:

redis-cli

列出数据库:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue" - 你需要的db。

然后运行:

DEL resque:queue:your_overloaded_queue

或者,如果要删除队列中的指定作业,请使用LRANGE命令从db列出几个值:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

然后将一个值复制/粘贴到LREM命令:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

其中5 - 要删除的元素数量。

答案 6 :(得分:0)

使用Resque API比删除Resque的Redis上的所有内容更安全,更安全。 Resque在内部进行一些清洁。

如果要删除所有队列和关联的入队作业,请执行以下操作:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

下次入队时将重新创建队列。

Documentation