首页 文章

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

提问于
浏览
37

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

7 回答

  • 13

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

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

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

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

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

  • 14

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

  • 4

    这是现在有效的:

    Resque.remove_queue("...")
    
  • 48

    进入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 - 要删除的元素数量 .

  • 0

    使用Resque API而不是删除Resque的Redis上的所有内容更安全,更安全 . Resque在里面做了一些清洁工作 .

    如果要删除 all 队列和关联的排队作业:

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

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

    Documentation

相关问题