我正在使用随时随地的宝石来处理我的cron工作。 我有一个活动和预订铁路应用程序,我有一个活动和预订表。
我希望在活动开始前一小时左右向活动组织者发送一个邮件,其中包含活动的所有预订。 但我无法通过随时随地的宝石找到方法。
目前,我只是在晚上9点发送所有邮件,这完全有效,但我没有为我的用例服务,因为不同的活动组织者在不同的时间需要它
答案 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
会使其更加通用,更易于阅读。