首页 > 解决方案 > 参数数量错误 - 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 时:

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

或者:

Resque.enqueue(CreateSiteMap)

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

标签: ruby-on-railsresque

解决方案


通过查看这里的代码

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

看起来,如果你正在使用enqueue,你应该传递类名和参数

# 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

  • 队列 -> 队列名称作为字符串
  • 类->类
  • *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 中的队列是一个字符串


推荐阅读