1

我需要在计划使用活动作业时存储信息,以便稍后执行。我想将此信息保存在活动作业本身中,但我不确定这是否可能。

这是我正在尝试的简化版本,它重现了我看到的错误:

class TestJob < ActiveJob::Base
  queue_as :default

  attr_reader :save_for_later

  def initialize(info)
    @save_for_later = info
  end


  def perform()
    logger.info(@save_for_later)
  end
end

class CollectionsController < ApplicationController
  def schedule_test_job
    TestJob.perform_later(Date.new)
  end
end

当我在 Collections 控制器中调用 schedule_test_job 时,我收到一个错误:nil:NilClass 的未定义方法 `map' 并且未调用执行操作。

我假设我需要将我试图保存在数据库中其他地方的信息持久化,但我想知道是否有适当的方法来完成我在这里所做的事情。我也不明白抛出的错误来自哪里。

4

1 回答 1

0

实际上所有作业参数都传递给perform,所以你必须写:

class TestJob < ActiveJob::Base
  def perform(date)
    logger.info(date)
  end
end

TestJob.perform_later(Date.new)

第二个问题是DateActiveJob 不能序列化 AFAIK。但是您可以轻松地传递一个字符串,然后解析日期;)

于 2015-04-19T01:31:39.443 回答