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

hen*_*yat 3 ruby resque

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

我按照说明操作,我可以排队,看看所有内容都正确排队使用resque-web.

但是,我有一个问题,即开始一个工人.文档指示运行bin/resque work以启动工作程序.

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

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

我怎样才能启动我的工作人员?非常感谢!

wkj*_*agt 6

解决问题的关键是耙.

Resque包括三个rake任务.您只需要一个需要'resque/tasks'使用它们的rakefile .当您向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
Run Code Online (Sandbox Code Playgroud)

你正在寻找的(开始一个工人)是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
Run Code Online (Sandbox Code Playgroud)

然后在一个终端类型TERM_CHILD=1 QUEUE=default rake resque:work.这将启动worker,查看名为default的队列.它将打印出作业传递给其perform类方法的任何参数.

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

你会看到在你启动工人的终端打印你好.

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