Ruby on rails 如何在设定的时间后更改模型的属性
我的应用程序中有一个计时器类,它将在创建后24小时过期 如果在创建日期后24小时运行,是否有办法运行expire\u,或者我必须每分钟运行一次cron作业Ruby on rails 如何在设定的时间后更改模型的属性,ruby-on-rails,activerecord,rails-activejob,Ruby On Rails,Activerecord,Rails Activejob,我的应用程序中有一个计时器类,它将在创建后24小时过期 如果在创建日期后24小时运行,是否有办法运行expire\u,或者我必须每分钟运行一次cron作业 class Timer < ApplicationRecord enum status: { running: 1, # the default expired: 2 # timed out finished: 3 # completed } # if the Timer isn't finishe
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,我隐隐觉得这是一种需要它的情况。运行“cron作业”是一种方法。但与其每分钟运行一次,不如每小时运行一次,除非有特定原因需要1分钟的精度
ActiveJob()是实现这一点的一种方法。我推荐Sidekiq,因为它对我们很有用。但是,如果没有关于您的环境的具体信息(Heroku?),我无法确切地指定如何执行此操作。我找到了一种方法,可以使用
延迟的\u作业运行此完全相同的场景,这会更好,因为它在将来某个时间运行
按分钟计算的cronjob在计时器过期时可能延迟59秒。
按小时计算的cronjob可能会延迟59分钟使计时器过期
下面是来自Twilio的关于如何制作提醒应用程序的文章 我们目前正在生产中使用Heroku,但我们计划最终转移到我们自己的基础设施。ActiveJob不像ActiveRecord在ORM中那样有自己的语法。在阅读了ActiveJob的文档后,它似乎在将来的特定时间运行任务。对于“cron作业”功能,可以使用Heroku调度程序。编写一个rake任务,该任务将更新所有过期作业的状态。