从另一份工作开始工作
Start job from another job
这是我想要实现的目标:
作为用户,我可以预订一个 class 的位置。如果 class 已经满了,我就会在等候名单上。当有可用的新位置时,我会收到一封电子邮件。从那时起,该应用程序将启动 "wait" 24 小时的后台作业。如果我还没有在 24 小时之前确认我正在使用这个位置,则归于等候名单上的下一个人,他也必须在 24 小时之前确认。
问题是将位置传递给列表中的下一个人时:由于我已经在 "timer job" 中,我需要与下一个人再次通话。
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
,这基本上会回调作业。但同样在这里,没有工作。
任何输入将不胜感激。
您发布的代码应该可以使作业入队,但是从您发布的代码来看,您的工作流程的 "wait 24 hours" 部分正在发生时并不清楚。看起来您的 TimerJob
发送了一封电子邮件,然后 立即 检查确认。
在我看来,在注册时立即发送电子邮件并使用 TimerJob.perform_in(24.hours, next_user_id)
排队工作会更有意义,后者会检查电子邮件是否已确认。然后,如果不是,您可以在 24 小时后发送另一份 email/queue 另一份工作。
这是我想要实现的目标: 作为用户,我可以预订一个 class 的位置。如果 class 已经满了,我就会在等候名单上。当有可用的新位置时,我会收到一封电子邮件。从那时起,该应用程序将启动 "wait" 24 小时的后台作业。如果我还没有在 24 小时之前确认我正在使用这个位置,则归于等候名单上的下一个人,他也必须在 24 小时之前确认。
问题是将位置传递给列表中的下一个人时:由于我已经在 "timer job" 中,我需要与下一个人再次通话。
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
,这基本上会回调作业。但同样在这里,没有工作。
任何输入将不胜感激。
您发布的代码应该可以使作业入队,但是从您发布的代码来看,您的工作流程的 "wait 24 hours" 部分正在发生时并不清楚。看起来您的 TimerJob
发送了一封电子邮件,然后 立即 检查确认。
在我看来,在注册时立即发送电子邮件并使用 TimerJob.perform_in(24.hours, next_user_id)
排队工作会更有意义,后者会检查电子邮件是否已确认。然后,如果不是,您可以在 24 小时后发送另一份 email/queue 另一份工作。