从另一份工作开始工作

时间:2016-10-20 10:01:27

标签: ruby-on-rails background-process rails-activejob

以下是我想要实现的目标: 作为用户,我可以预订课程。如果课程已满,我将在等候名单上。当有新地点可用时,我会收到一封电子邮件。从那时起,该应用程序启动一个后台工作,等待"等待" 24小时。如果我没有确认我在24小时之前就已经到了这个位置,那么它将归因于候补名单上的下一个人,他们还必须在24小时之前确认。

问题在于将该位置传递给列表中的下一个人:因为我已经在"计时器工作"中,我需要再与下一个人一起调用它。

class TimerJob
  def perform(user_id)
    send_confimation_email
    if #didn't confirm before 24h
      TimerJob.perform(next_user_on_list_id)
    else
      # save his spot
    end 
  end 
end

第一份工作正常,它会发送电子邮件,在24小时内等待确认,然后将另一封电子邮件发送给列表中的下一个人,但不会开始另一个工作(第5行)。因此,如果24小时等待结束,它将再次启动该过程。

所以问题是:如何在我的例子中调用工作中的工作? 这有什么原因吗?

或者我是否过于复杂,并且一个新的眼睛会有一个更容易的解决方案?

我想在工作中调用module,这基本上会回复工作。但同样在这里,没有工作。 任何意见都将非常感激。

1 个答案:

答案 0 :(得分:0)

您发布的代码应该按照排队作业的方式工作,但是从您发布的代码中不清楚您工作流程的“等待24小时”部分正在发生。看起来您TimerJob发送了一封电子邮件,然后立即检查确认。

在我看来,在注册时立即发送电子邮件并将TimerJob.perform_in(24.hours, next_user_id)的作业排入队列以检查电子邮件是否已确认更有意义。然后,如果不是,你可以在24小时内发送另一封电子邮件/队列另一份工作。