【问题标题】:Ruby app and Resque: can't start workersRuby 应用程序和 Resque:无法启动工作人员
【发布时间】:2014-12-12 09:44:26
【问题描述】:

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

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

但是,我在启动工人时遇到了问题。文档表明要运行 bin/resque work 来启动工作人员。

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

Internet 上到处都有同样的问题,但对于 Rails 应用程序,而不是纯 Ruby。该解决方案似乎在 rakefile 中包含一些我没有的内容。

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

【问题讨论】:

    标签: ruby resque


    【解决方案1】:

    解决问题的关键是 rake。

    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
    

    您正在寻找的(启动一名工人)是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。这将启动 worker,观察名为 default 的队列。它将打印出作业传递给其perform 类方法的任何参数。

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

    您将在启动工作程序的终端中看到 hello。

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

    【讨论】:

    • 非常感谢@wkjagt。它完全按照您提到的方式工作并解决了我的问题。
    • 为什么人们输入 TERM_CHILD=1 QUEUE=default rake resque:work 而应该是 rake resque:work TERM_CHILD=1 QUEUE=default。这是一个古老的语法吗?我很难做到这一点,因为文档还颠倒了rake resque:work 之后的参数顺序并将它们放在前面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多