参数数量错误 - 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中的队列是一个字符串
我有一份工作 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中的队列是一个字符串