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



在RubyonRails上,我需要启动一个"救援"任务。要使其工作,必须在新终端(macOS(中执行命令QUEUE=* rake resque:work

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

resque工作人员将继续轮询挂起作业的redis队列。因此,我们需要在启动任务时将队列名称作为args传递给resque任务。QUEUE=*也在做同样的事情。

所以,在这里你的问题可以分解为两部分,

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

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. ENV变量:

    QUEUE=* rake resque:work

    对于这个任务应该像,

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

我们的resque库对此使用了第四种方法。实际上,您在这里使用QUEUE=*设置env变量。

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

export QUEUE=*
rake resque:work

现在进入*部分:

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

QUEUES="queue1,queue2" rake resque:work

所以,在这里,resque任务将只从队列1和队列2中提取作业,其中队列1具有高优先级。

rake resque:work

rake:是启动任务的命令

resque:是在名称下对任务进行分组的命名空间

work:是任务名称

最新更新