防止重复的ActiveJob被安排

时间:2015-11-27 21:43:24

标签: ruby-on-rails rails-activejob

我有一个Rails应用程序,用于查询外部Web服务以更新记录。 我想继续轮询Web服务,直到用户会话到期。

目前,我在show action中为我想要更新的记录创建一个ActiveJob。

在ActiveJob中,我使用

重新安排它
  self.class.set(wait: 60.seconds).perform_later(record_id)

问题是如果用户再次进入show动作,它将创建另一个ActiveJob。

无论如何都要防止创建重复的作业?

2 个答案:

答案 0 :(得分:0)

首次在用户首次访问节目时设置Cookie值。

self.class.set(wait: 60.seconds).perform_later(record_id) if cookies[:_aj].nil?
cookies[:_aj] = true

也可以在Record中创建一个列,也可以将其命名为pending_update,并在计划运行作业时将其设置为true,并将其设置为false预定工作结束。这样,即使用户清除了cookie,您的程序也不会创建重复的作业。

答案 1 :(得分:0)

理想情况下,将有一种方法可以搜索ActiveJob以查看是否已经存在。 ActiveJob.find_by(job: JobType, params: record_id之类的东西。这样,您就可以在创建副本之前操纵作业。我将进一步研究,看看是否可以创建...