3

有人可以告诉我如何扩展delayed_jobs gem 以允许我添加几个自定义列吗?

我添加了几列,但是当我尝试“干净地”使用它们时,我得到:

无法批量分配受保护的属性:owner_type、owner_id

所以我需要将列添加到 cattr_accessor:

module Delayed
  class Worker
    DEFAULT_SLEEP_DELAY      = 5
    DEFAULT_MAX_ATTEMPTS     = 25
    DEFAULT_MAX_RUN_TIME     = 4.hours
    DEFAULT_DEFAULT_PRIORITY = 0
    DEFAULT_DELAY_JOBS       = true
    DEFAULT_QUEUES           = []
    DEFAULT_READ_AHEAD       = 5

    cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time,
      :default_priority, :sleep_delay, :logger, :delay_jobs, :queues,
      :read_ahead, :plugins, :destroy_failed_jobs, **:owner_id, :owner_type**

但是,不确定扩展它的最佳方法。我的猜测/尝试是创建一个文件并将其添加到初始化程序目录中。但是,由于某种原因,它不起作用。

任何提示表示赞赏。

4

3 回答 3

1

你真的需要扩展delayed_jobs 表吗?我的方法是不理会它并使用以下两种技术之一:

  • 为正在排队的对象添加 owner_id 和 owner_type 字段。
  • 创建一个与 delay_jobs 有 :belongs_to 关系的单独表。然后,您使用 DJ 的钩子在工作的整个生命周期中使两者保持同步。

第一种方法更简单,但并不适合所有情况。这些中的任何一个都对你有用吗?

于 2012-08-28T20:46:49.600 回答
1

其他答案可能有用,但他们没有回答问题。要将自定义列添加到delayed_jobs表中,您可以按照以下步骤操作。我这样做并成功地创建了Delayed::Job与其他对象之间的关联。

于 2013-12-31T15:48:43.963 回答
0

另一种选择是在初始化程序中简单地添加以下行(例如 config/initializers/delayed_job.rb):

Delayed::Job.attr_accessible :owner_type, :owner_id
于 2013-08-12T23:35:08.207 回答