首页 > 解决方案 > 每当基于模型的特定时间 gem cronjob

问题描述

我正在使用when gem 来处理我的cron 工作。我有一个活动和预订轨道应用程序,其中有一个活动和一个预订表。

我想在活动开始时间前一小时左右向活动组织者发送一封邮件,其中包含活动的所有预订。但是我无法找到使用when gem 的方法。

目前,我只是在晚上 9 点发送所有邮件,效果很好,但我不适合我的用例,因为不同的活动组织者在不同的时间需要它

标签: ruby-on-railsrubycronwhenever

解决方案


有一种whenever动态运行的方法。只需将此行添加到您的顶部schedule.rb

require "/home/username/appname/config/environment.rb"

这允许您使用 schedule.rb 上的所有模型类。例如:

every 1.day, :at => (Booking.last.event_time - 1.hour).strftime('%I:%M %p') do
  ...
end

此外,您也可以使用环境变量来设置时间。

时间变化时不要忘记更新 crontab:

system 'bundle exec whenever --update-crontab'

但是 cron 用于在固定时间定期运行计划作业(命令或 shell 脚本)。所以,无论何时都不是你更好的解决方案。正如 iGian 在他的评论中所写 - 检查这个主题:延迟工作(sidekiq 或类似)与该工作更相关。


推荐阅读