每当 gem 基于模型的特定时间的 cronjob

Whenever gem cronjob on a particular time based on model

我正在使用 whenever gem 来处理我的 cron 作业。 我有一个活动和预订 rails 应用程序,其中我有一个活动和预订 table。

我想在活动开始前一个小时左右向活动组织者发送一封邮件,其中包含活动的所有预订信息。 但是我无法通过 gem 找到解决方法。

目前,我只是在晚上 9 点发送所有邮件,这非常有效,但我不满足我的用例,因为不同的活动组织者在不同的时间需要它

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

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

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

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 在他的评论中所写 - 检查此 topic:延迟工作(sidekiq 或类似)与该工作更相关。

@Leo 回答正确,但在 schedule.rb 的开头添加 require File.expand_path(File.dirname(__FILE__) + "/environment") 会使它更通用且更易于阅读。