以下是我想要实现的目标: 作为用户,我可以预订课程。如果课程已满,我将在等候名单上。当有新地点可用时,我会收到一封电子邮件。从那时起,该应用程序启动一个后台工作,等待"等待" 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
,这基本上会回复工作。但同样在这里,没有工作。
任何意见都将非常感激。
答案 0 :(得分:0)
您发布的代码应该按照排队作业的方式工作,但是从您发布的代码中不清楚您工作流程的“等待24小时”部分正在发生。看起来您TimerJob
发送了一封电子邮件,然后立即检查确认。
在我看来,在注册时立即发送电子邮件并将TimerJob.perform_in(24.hours, next_user_id)
的作业排入队列以检查电子邮件是否已确认更有意义。然后,如果不是,你可以在24小时内发送另一封电子邮件/队列另一份工作。