【发布时间】:2016-10-20 10:01:27
【问题描述】:
这是我想要实现的目标: 作为用户,我可以预订课程的位置。如果课程已经满了,我会在等候名单上。当有新的位置可用时,我会收到一封电子邮件。从那时起,应用程序将启动一个后台作业,该作业将“等待”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,这基本上会回调工作。但同样在这里,没有工作。
任何意见将不胜感激。
【问题讨论】:
-
你在用sidekiq吗?
-
@Jayaprakash 是的,我是
-
你能试试这个吗? “TimerJob.new.perform(next_user_on_list_id)”或“TimerJob.perform_async(next_user_on_list_id)”
-
可以添加
if #didn't confirm before 24h的代码吗?没有这个,就不可能看到 24 小时等待期的发生时间。
标签: ruby-on-rails background-process rails-activejob