我需要在安排活动作业时存储信息,以便稍后执行。我想将此信息保存在Active Job中,但我不确定这是否可行。
这是我正在尝试的简化版本,它重现了我看到的错误:
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的未定义方法`map':NilClass 并且不会调用执行操作。
我假设我需要保留我想要保存在我的数据库中其他地方的信息,但我想知道是否有一种正确的方法来完成我在这里所做的事情。我也不明白所引发的错误来自何处。
答案 0 :(得分:0)
实际上所有作业参数都传递给perform
,所以你必须写:
class TestJob < ActiveJob::Base
def perform(date)
logger.info(date)
end
end
TestJob.perform_later(Date.new)
第二个问题是Date
不是ActiveJob可序列化的AFAIK。但是你可以轻松传递一个字符串,然后解析日期;)