Ruby 应用程序和 Resque : can't start workers

标签 ruby resque

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

我已按照说明进行操作,我可以使用 resque-web 对内容进行排队并查看所有内容是否已正确排队。

但是,我在启动一个 worker 时遇到了问题。文档指示运行 bin/resque work 以启动工作程序。

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

网上到处都是同样的问题,但是对于Rails app,不是纯Ruby。该解决方案似乎在 rakefile 中包含了一些我没有的东西。

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

最佳答案

解决问题的关键是抽成。

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

您正在寻找的(启动一名 worker )是 resque:work .您使用 QUEUE 告诉它要收听哪个队列环境变量。所以开始你的 worker 会是这样的:

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 .这将启动 worker,监视名为 default 的队列。它将打印出作业传递给其 perform 的任何参数类方法。

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

您会在启动 worker 的终端中看到打印的 hello

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

关于Ruby 应用程序和 Resque : can't start workers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432899/

相关文章:

redis - 如果不使用 Rails,如何在 Resque 中设置 Redis url?

ruby-on-rails - Rails 应用程序中的 Enqueue_at(..) 错误。 Resque 调度程序引发 NoQueueError

ruby-on-rails-3 - Resque 来自其他主机的 Worker 在我的系统上注册并处于事件状态

ruby - 如何在 RSpec 模拟中使用动态值?

sql - 如何在 SQLite3 和 Rails 3.1 中打开 REGEXP?

ruby - 对散列的散列进行排序

ruby-on-rails-3.1 - 如何使用 Rails 3.1 和 Assets 管道在 Heroku 上配置 Resque

html - 未定义的方法 `error_span' - Rails 项目

ruby-on-rails - 从清除 session 中停止设计

ruby - Resque vs Sidekiq?