如何在设定时间后更改模型的属性
How do I change attributes of a model after a set time
我的应用程序中有一个计时器 class 设置为在创建后 24 小时过期。
有没有办法在创建日期后 运行 expire_if_running 24 小时,或者我必须每分钟 运行 一个 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,我隐隐觉得这种情况需要它。
运行 "cron job" 是一种方法。但是与其每分钟 运行 宁,不如每小时 运行 更好,除非有特定原因需要 1 分钟的准确性。
ActiveJob (reference) 是一种方法。我会推荐 Sidekiq,因为它对我们非常有用。但是,如果没有关于您的环境(Heroku?)的具体信息,我无法具体说明如何操作。
我找到了一种方法 运行 使用 delayed_job
这个完全相同的场景,这更好,因为它在未来的某个时间 运行s。
按分钟计算的 cronjob 可能会延迟 59 秒使计时器到期。
按小时计算的 cronjob 可能会延迟 59 分钟使计时器过期。
这是来自 Twilio 的 tutorial 关于如何制作提醒应用的文章。
我的应用程序中有一个计时器 class 设置为在创建后 24 小时过期。
有没有办法在创建日期后 运行 expire_if_running 24 小时,或者我必须每分钟 运行 一个 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,我隐隐觉得这种情况需要它。
运行 "cron job" 是一种方法。但是与其每分钟 运行 宁,不如每小时 运行 更好,除非有特定原因需要 1 分钟的准确性。
ActiveJob (reference) 是一种方法。我会推荐 Sidekiq,因为它对我们非常有用。但是,如果没有关于您的环境(Heroku?)的具体信息,我无法具体说明如何操作。
我找到了一种方法 运行 使用 delayed_job
这个完全相同的场景,这更好,因为它在未来的某个时间 运行s。
按分钟计算的 cronjob 可能会延迟 59 秒使计时器到期。
按小时计算的 cronjob 可能会延迟 59 分钟使计时器过期。
这是来自 Twilio 的 tutorial 关于如何制作提醒应用的文章。