在其他方法完成后运行方法延迟作业 rails 3

Posted

技术标签:

【中文标题】在其他方法完成后运行方法延迟作业 rails 3【英文标题】:run method after the other method is finished delayed job rails 3 【发布时间】:2012-09-11 17:52:47 【问题描述】:

我正在使用 delayed_job gem 来运行延迟方法。

我想先运行一个方法,当第一个方法完成后运行第二个方法。

1º法

Order.delay(queue: "Job", priority: 1, run_at: job.minutes_to_in_progress_overtime.minute.from_now).inprogress_overtime(job)

2º法

Order.delay(queue: "Job", priority: 1, run_at: job.minutes_to_cancel_due_to_overtime.minute.from_now).canceled_overtime(job)

我的班级顺序如下:

class Order

  def self.inprogress_overtime(job)
   #actions goes here
  end

  def self.canceled_overtime(job)
   #actions goes here
  end

 end

我该怎么做?

非常感谢!

【问题讨论】:

我没试过,但是你的第一种方法可以是在它的末尾设置第二种方法的方法吗? 谢谢@MrDanA 你能写一个例子吗?谢谢! 从您的 inprogress_overtime 方法内部 - 添加来自上述 2º Method 的代码? 抱歉,它对我不起作用 :(。我添加了我的模型 Oder 的方法。谢谢! 【参考方案1】:

根据您的要求,我认为就这么简单?

# enqueue the inprogress_overtime
Order.delay(queue: "Job", priority: 1, run_at: job.minutes_to_in_progress_overtime.minute.from_now).inprogress_overtime(job)

class Order

  def self.inprogress_overtime(job)
    # actions goes here

    # now enqueue the canceled_overtime
    Order.delay(queue: "Job", priority: 1, run_at: job.minutes_to_cancel_due_to_overtime.minute.from_now).canceled_overtime(job)
  end

  def self.canceled_overtime(job)
    # actions goes here
  end

end

注意:可能不需要从 inprogress_overtime 延迟,因为此时您已经在后台作业中运行?

【讨论】:

以上是关于在其他方法完成后运行方法延迟作业 rails 3的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中完成延迟作业后执行 ajax 回调?

检查延迟的作业是不是在rails中运行

使用作为守护任务运行的延迟作业部署 Rails 应用程序

如何使 ExceptionNotifier 在 Rails 3 中与延迟作业一起使用?

销毁 Rails 中所有延迟的工作

如何查看延迟的作业队列?