每当 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")
会使它更通用且更易于阅读。
我正在使用 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")
会使它更通用且更易于阅读。