2016-09-02 48 views
1

我的应用程序中的计时器类设置为在创建后24小时过期。如何在设定的时间后更改模型的属性

有没有办法在创建日期后24小时运行expire_if_running,还是我必须每分钟运行一次cron作业?

class Timer < ApplicationRecord 
    enum status: { 
    running: 1, # the default 
    expired: 2 # timed out 
    finished: 3 # completed 
    } 

    # if the Timer isn't finished, expire it 
    def expire_if_running 
    self.status = "expired" if self.running? 
    end 
end 

请提供样本代码或引用您的答案。我从来没有使用过ActiveJob,而且我有这种感觉,这是需要它的那种情况。

回答

1

我找到了一种方法来运行这个完全相同的场景,使用delayed_job,这是因为它在未来的某个时间运行会更好。

以分钟计的cronjob在计时器到期后可能会延迟59秒。
按小时计算的cronjob可能会在计时器到期后延迟59分钟。

这是Twilio的tutorial关于如何制作提醒应用程序。

0

运行“cron工作”是这样做的一种方式。但是,除了每分钟运行一次,否则每小时运行一次会更好,除非有特定的原因需要1分钟的精度。

ActiveJob(reference)是执行此操作的一种方法。我会推荐Sidekiq,因为它对我们很好。但是,如果没有关于您的环境的具体信息(Heroku?),我无法详细说明如何执行此操作。

+0

我们目前在生产中使用Heroku,但我们计划最终迁移到我们自己的基础设施。不ActiveJob有它自己的语法,像ActiveRecord对它的ORM。 – amingilani

+0

在阅读ActiveJob的文档之后,它似乎将来会在特定时间运行任务。对于“cron job”功能,您可以使用Heroku调度程序。编写一个rake任务,以更新所有过期作业的状态。 –

相关问题