将数据存储在作业中以供执行时使用

时间:2015-02-08 20:13:29

标签: ruby-on-rails rails-activejob

我需要在安排活动作业时存储信息,以便稍后执行。我想将此信息保存在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 并且不会调用执行操作。

我假设我需要保留我想要保存在我的数据库中其他地方的信息,但我想知道是否有一种正确的方法来完成我在这里所做的事情。我也不明白所引发的错误来自何处。

1 个答案:

答案 0 :(得分:0)

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

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

TestJob.perform_later(Date.new)

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