ruby on rails 3 -如何销毁由救援工人排队的工作



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

考虑上述答案,如果您需要清除所有队列,您可以使用以下命令:

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

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

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

Resque已经有这样做的方法-尝试Resque.remove_queue(queue_name)(参见这里的文档)。它在内部执行Resque.redis.del(),但它也做其他清理工作,并且通过使用api方法(而不是假设resque是如何工作的),您将更加面向未来。

更新rake任务清理(根据最新redis命令更改):https://gist.github.com/1228863

现在是这样的:

Resque.remove_queue("...")

使用Resque API比删除Resque的Redis上的所有内容更安全,更防弹。救援队在里面做一些清洁工作。

如果要删除所有队列和相关的排队作业:

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

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

文档

输入redis console:

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

相关内容

  • 没有找到相关文章

最新更新