【问题标题】:Delayed_job : defining timeDelayed_job : 定义时间
【发布时间】:2011-08-09 04:45:26
【问题描述】:

所以我试图弄清楚如何干净地做到这一点。为了让示例保持简单,假设我有一个对象MyMailMeeting,我在其中定义了两次我想向会议中的人发送两封不同的电子邮件。

在我的MyMailMeeting 模型中,我想定义这两种方法(而不是拥有自己的延迟作业类),但我需要让这些方法查看对象中定义的时间,以便知道何时发送。

def send_first
  ... do stuff
end
handle_asynchronously :send_first, :run_at => Proc.new { send_first_time }

问题是根据documentationsend_first_time需要是一个类方法,并希望它是一个实例方法,这样我才能看到用户定义的时间。

我该怎么做?还是我只需要创建两个单独的 Delayed_job 类并执行以下操作:

Delayed::Job.enqueue(SendFirstJob.new, :run_at => send_first_time)

【问题讨论】:

    标签: delayed-job


    【解决方案1】:

    我相信 handle_asynchronously 将对象传递给 Procs 以获得它的属性,所以:

    handle_asynchronously :send_first, :run_at => Proc.new { |obj| obj.send_first_time }
    

    你总是可以滚动你自己的异步包装器

    def send_first_async(*args)
      delay(:run_at => send_first_time).send_first(*args)
    end
    

    【讨论】:

    • 非常感谢您的回答。在 gem 的 README/wiki 中没有延迟选择时间选项的例子,这个答案帮助我找到了一种短而甜的方式来安排未来的任务,而不是使用丑陋的 - handle_asynchronously。
    【解决方案2】:

    我最终使用了第二种方法。虽然它不像我想要的那样对时间敏感。

    如果有人对如何使send_first_time 成为基于用户输入的变量有答案,我很乐意接受它作为正确答案。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2013-02-25
      • 2023-03-24
      • 2011-12-24
      • 2011-10-28
      相关资源
      最近更新 更多