【发布时间】:2015-02-08 20:13:29
【问题描述】:
我需要在计划使用活动作业时存储信息,以便稍后执行。我想将此信息保存在活动作业本身中,但我不确定这是否可能。
这是我正在尝试的简化版本,它重现了我看到的错误:
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” 并且不会调用执行操作。
我假设我需要将我试图保存在数据库其他位置的信息持久化,但我想知道是否有适当的方法来完成我在这里所做的事情。我也不明白抛出的错误是从哪里来的。
【问题讨论】:
-
你从哪里得到这个错误?这可能是因为您不应该覆盖初始化,因为它也会执行其他一些操作。您可以将日期作为作业参数传递,因为它将被持久化,但将其作为数字传递,因为 ActiveJob 只接受基本类型(可以轻松序列化/反序列化)。您可以使用
i=Time.current.to_i和Time.at(i) -
@bcd 调用控制器中的函数
schedule_test_job时出错。关于初始化需要做其他事情的观点,如果我在初始化块的末尾添加对 super() 的调用,这个错误确实会消失。
标签: ruby-on-rails rails-activejob