参数数量错误 - resque

Wrong number of arguments - resque

我有一份工作 create_site_map.rb 如下所示:

class CreateSiteMap
  @queue = :create_site_map
  def self.perform(slct_common_path, http_host, site_id)
  end
end

还有一个 rake 文件:

require "resque/tasks"
require "resque/scheduler/tasks"

namespace :create_site_map do
  desc "Create site map"

  task create_site_map: :environment do
    Resque.enqueue CreateSiteMap, 0, "a", 1071
  end
end

当我 运行 在 Termial 中重新请求时:

Resque.enqueue_to(:high, CreateSiteMap, 0, "abc", 1071)

或:

Resque.enqueue(CreateSiteMap)

显示错误如下:wrong number of arguments (given 0, expected 3) 请帮助我 如何在 resque 中传递参数?

我似乎无法重现这个。我正在尝试使用包含以下内容的名为 test.rb 的文件:

require 'resque'
Resque.logger.level = Logger::DEBUG

class CreateSiteMap
  @queue = :create_site_map
  def self.perform(slct_common_path, http_host, site_id)
    puts http_host
  end
end

Resque.enqueue_to(:high, CreateSiteMap, 0, "abc", 1071)

# Now perform the job
klass, args = Resque.reserve(:high)
klass.perform(*args)

而当 运行 这与

$ ruby test.rb

它按预期输出 abc

通过查看此处的代码

https://github.com/resque/resque/blob/master/lib/resque.rb#L386

看起来,如果您使用 enqueue,您应该传递 class 名称和参数

# https://github.com/resque/resque/blob/master/lib/resque.rb#L402
def enqueue(klass, *args)
  enqueue_to(queue_from_class(klass), klass, *args)
end

或者如果您使用的是 enqueue_to

  • 队列 -> 字符串形式的队列名称
  • 类 -> class
  • *args -> 参数
# https://github.com/resque/resque/blob/master/lib/resque.rb#L415
def enqueue_to(queue, klass, *args)

所以,在你的情况下,

# using enqueue 
Resque.enqueue(CreateSiteMap, 0, "abc", 1071)
# using enqueue_to
Resque.enqueue_to('high', CreateSiteMap, 0, "abc", 1071)

注意:enqueue_to中的队列是一个字符串