在RubyonRails上,我需要启动一个"救援"任务。要使其工作,必须在新终端(macOS(中执行命令QUEUE=* rake resque:work
。
但是:有人能解释一下这到底意味着什么吗?
resque工作人员将继续轮询挂起作业的redis队列。因此,我们需要在启动任务时将队列名称作为args传递给resque任务。QUEUE=*
也在做同样的事情。
所以,在这里你的问题可以分解为两部分,
QUEUE
的目的是什么*
的目的是什么
QUEUE
:
在ruby中,我们可以通过4种方式实现这一点。
-
耙参数:
rake resque:work[*]
为此,任务应具有以下约定
task :work, [:queues] do |t, args| queues = args[:queues] #do some thing with queues end
-
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
-
选项:
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
-
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
:是任务名称