如何在控制台中 运行 重新请求作业?

How to run a resque job in the console?

我正在尝试在控制台中调用作业,但总是出错。

遵循以下文档:

创建了以下文件: (lib/jobs/archive_survey_jobs.rb)

module Jobs
  class ArchiveSurveysJob < ActiveJob::Base
    @queue = :setup

    def perform(survey_type)
      if SurveyTypes.all_classes.map(&:to_s).include?(survey_type)

        surveys = Survey.where(something: 'stuff')\
                        .where.not(something: 'stuff',
                                   something: 'stuff')

        surveys.each do |survey|
          do_something
        end
      end
    end
  end
end

我知道我可以做类似 Resque.enqueue(ArchiveSurveysJob, 'string_here')

如何在控制台中调用它?如果我尝试: Jobs::ArchiveSurveysJob.create(survey_type: 'string_here'), 当我检查 Resque Statuses 时,它导致了一个错误:`任务因错误而失败:

undefined local variable or method `args' for #

如果我试试这个:

Jobs::ArchiveSurveysJob.perform(`string_here`)

或:

Jobs::ArchiveSurveysJob.perform_now('string_here')

我得到:

ArgumentError: wrong number of arguments (given 0, expected 1..2)

如果我遗漏了一些文档或做错了什么,请告诉我。

我是如何做到这一点的,方法是创建一个 Rake 任务并在那里调用 Job。

在您的示例中,perform 是一个实例方法。您正在调用可能没有任何参数的 class 级别 perform。我不知道你的 resque 版本具体是什么,但是你可以在至少一个版本中像这样从控制台排队作业:Resque.enqueue(Jobs::ArchiveSurveysJob)

ps,确保你的 resque worker 是 运行。 在开发环境中,我通常在行中有 resque 运行:

# config/initializers/resque.rb
Resque.inline = true if Rails.env.dev? || Rails.env.test?