有人可以解释一下 QUEUE=* rake resque:work 这个词吗

Can someone explain the term QUEUE=* rake resque:work

Ruby Rails 我需要开始一个 'rescue' 任务。 要让它工作,必须在新终端 (macOS) 中执行命令 QUEUE=* rake resque:work

但是:有人能解释一下这到底是什么意思吗?

resque worker 将继续轮询 redis 队列以等待待处理的作业。因此,我们需要在启动任务时将队列名称作为参数传递给重新请求任务。 QUEUE=* 在这里做同样的事情。

所以,在这里您的问题可以分解为 2 个部分,

  1. QUEUE
  2. 的目的是什么
  3. *
  4. 的目的是什么

QUEUE:

在 ruby 中,我们可以通过 4 种方式做到这一点。

  1. 耙参数:

    rake resque:work[*]

    为了使这个工作重新请求任务应该有以下约定

    task :work, [:queues] do |t, args|
     queues = args[:queues]
     #do some thing with queues
    end
    
  2. ARGV:

    rake resque:work *

    为了使这个工作重新请求任务应该像

     task :work do
       ARGV.each { |a| task a.to_sym do ; end } # to prevent multiple tasks
       queues = ARGV[0]
       # do some thing with the queues
    end
    
  3. 选项:

    rake resque:work --queues=*

    任务又应该是这样的,

     task :work do
      options = {}
      OptionParser.new do |opts|
        opts.banner = "Usage: rake add [options]"
        opts.on("-q", "--queues ARG", String) { |queues| options[:queues] = queues }
      end.parse!
      # do some thing with options[:queues]
     end
    
  4. 环境变量:

    QUEUE=* rake resque:work

    这个任务应该是这样的,

     task :work do
        #use  ENV['queues']
     end
    

我们的 resque 库为此使用了第 4 种方法。因此,您实际上是在此处使用 QUEUE=*.

设置环境变量

同样的我们可以使用下面的代码分成两行。

export QUEUE=*
rake resque:work

现在进入*部分:

*是一个通配符char,告诉resque监听redis中的所有队列。但优先级将按字母顺序排列。如果您不想要这个,我们也可以调用具有特定队列的任务,例如

QUEUES="queue1,queue2" rake resque:work

所以,这里的resque任务只会从queue1和queue2中拉取作业,其中queue1的优先级高

rake resque:work:

rake: 是启动任务的命令

resque: 是将任务分组在一个名称下的命名空间

work: 是任务名