Неверное количество аргументов - resque - PullRequest
0 голосов
/ 25 октября 2019

У меня есть задание create_site_map.rb, как показано ниже:

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

И файл граблей:

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

Когда я запускаю resque в Termial:

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

или:

Resque.enqueue(CreateSiteMap)

это ошибка показа, подобная этой: wrong number of arguments (given 0, expected 3) Пожалуйста, помогите мне Как я могу передать аргументы в resque?

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Глядя на код здесь

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,

  • queue -> имя очереди в виде строки
  • klass -> class
  • * args -> arguments
# 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 представляет собой строку

0 голосов
/ 25 октября 2019

Я не могу воспроизвести это. Я пытаюсь с файлом 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, как и ожидалось.

...