我的应用程序集中有一个计时器类,在创建后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,我有一种微弱的感觉,这就是需要它的情况。
答案 0 :(得分:1)
我找到了一种使用delayed_job
运行这个完全相同的方案的方法,因为它在将来的某个时间运行会更好。
在计时器到期时,按分钟计算的cronjob可能会延迟59秒 在计时器到期时,按小时计算的cronjob可能会晚59分钟。
来自Twilio的tutorial如何制作提醒应用。
答案 1 :(得分:0)
运行“cron job”是这样做的一种方式。但不是每分钟运行一次,最好每小时运行一次,除非有一个特定的理由要有1分钟的准确度。
ActiveJob(reference)是实现此目的的一种方法。我会推荐Sidekiq,因为它对我们很有用。但是,如果没有关于您的环境的特定信息(Heroku?),我无法准确指定如何操作。