Ruby app和Resque:无法启动工作者

时间:2014-12-11 21:40:46

标签: ruby resque

我有这个小的ruby应用程序,而不是Ruby on Rails - 纯Ruby。

我已按照说明进行操作,并且可以使用resque-web对所有内容进行排队。

但是,我有一个问题就是开始一个工人。文档指示运行bin/resque work以启动工作人员。

这样做会触发消息-bash: bin/resque: No such file or directory

互联网上的每个地方,人们都有同样的问题,但对于Rails应用程序,不是纯粹的Ruby。解决方案似乎在rakefile中包含了一些我没有的东西。

如何启动我的工作人员?非常感谢!

1 个答案:

答案 0 :(得分:6)

解决问题的关键是耙。

Resque包括三个rake任务。您只需要一个rakefile,需要'resque/tasks'才能使用它们。当您向Rake询问其命令列表时,您将看到Resque中包含的三个任务:

rake resque:failures:sort  # Sort the 'failed' queue for the redis_multi_queue failure backend
rake resque:work           # Start a Resque worker
rake resque:workers        # Start multiple Resque workers

您正在寻找的(启动一名工作人员)是resque:work。您可以使用QUEUE环境变量告诉它要侦听哪个队列。所以启动你的工作人员会是这样的:

QUEUE=your_queue_name rake resque:work

或者,您可以使用QUEUES=*收听所有队列。

编辑:

这是一个更完整的例子。创建一个名为rakefile的文件:

require 'resque/tasks'
require 'resque'

class Worker
  @queue = :default

  def self.perform(my_arg)
    puts my_arg
  end
end

task :hello do
    Resque.enqueue(Worker, 'hello')
end

然后在一个终端类型TERM_CHILD=1 QUEUE=default rake resque:work中。这将启动工作人员,观察名为默认的队列。它会打印出作业传递给perform类方法的任何参数。

在第二个终端类型rake hello中。这将为Worker类排队作业,将字符串hello作为参数传递(将传递给perform类中的Worker方法)。它知道通过查看default上的@queue属性来推送到Worker队列。

您将在启动工作人员的终端中看到 hello

这个例子并没有做任何有用的事情,你也不会把所有这些都放在你的rakefile中,但我认为这是你开始修改它并建立自己的好起点。