每当宝石cronjob在特定时间基于模型

时间:2018-05-23 09:18:04

标签: ruby-on-rails ruby cron whenever

我正在使用随时随地的宝石来处理我的cron工作。 我有一个活动和预订铁路应用程序,我有一个活动和预订表。

我希望在活动开始前一小时左右向活动组织者发送一个邮件,其中包含活动的所有预订。 但我无法通过随时随地的宝石找到方法。

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

2 个答案:

答案 0 :(得分:2)

有一种方法可以动态运行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在他的评论中写的那样 - 检查这个topic:延迟工作(sidekiq或类似)与该工作更相关。

答案 1 :(得分:0)

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