我可以在这里看到一些可能的选项。这取决于您的假设/限制。
可能的假设(按实施难度增加排序):
1) 数据库中的数据不需要是正确的,但是下次有人查看数据时,我们会相应地对其进行修复
2)数据库中的数据不需要是正确的,但是例如在可定义的时间间隔内
3) 数据库中的数据需要始终正确
让我更详细地介绍一下这些
数据会显示正确,下次有人查看数据时
这其实很简单。在检索要显示的数据时,检查某些条件/时间是否已经过去,并相应地设置标志。
对于用户而言,正确设置标志实际上并不相关,但每次用户查看数据时,标志都会正确设置。
在给定的时间间隔内数据将是正确的
一个简单的案例是每小时检查一次,每半小时检查一次,每天检查一次,并设置或修复需要更改的项目的状态。
要做到这一点,您可以使用 cron 作业或像 whenever 这样的 gem
这是一种非常简单的方法,可以确保您的数据在可接受/给定的时间间隔内是正确的(如果您的问题当然有这样的时间间隔)。
数据必须设置在正确的时间
在这里我看到两个选项,对于需要在给定时间更改状态的每个项目,安排一个
任务使用与以前相同的选项:cron 或无论何时 gem。这可行,但我不完全确定 cron 是否是安排大量 1-off 作业的最佳解决方案。
另外,一个非常干净的解决方案是使用像 DelayedJob 这样的 gem。这个 gem 主要用于将任务卸载到后台,例如对于需要更多时间处理的任务。但您也可以使用它在不久的将来,在非常特定的时间执行任务。
def change_flag_when_needed
# change the flag
end
# 5.minutes.from_now will be evaluated when change_flag_when_needed is called
handle_asynchronously :in_the_future, :run_at => Proc.new { 5.minutes.from_now }
无论何时调用change_flag_when_needed,它都会评估给定的块,该块现在包含5.minutes.from_now,但也可以计算应该执行它的实际时间。
希望这会有所帮助。