ruby-on-rails - 每当基于模型的特定时间 gem cronjob
问题描述
我正在使用when gem 来处理我的cron 工作。我有一个活动和预订轨道应用程序,其中有一个活动和一个预订表。
我想在活动开始时间前一小时左右向活动组织者发送一封邮件,其中包含活动的所有预订。但是我无法找到使用when gem 的方法。
目前,我只是在晚上 9 点发送所有邮件,效果很好,但我不适合我的用例,因为不同的活动组织者在不同的时间需要它
解决方案
有一种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 或类似)与该工作更相关。
推荐阅读
- specman - 打印文件名和行号以记录
- python - 如何将一个功能的小计分配给另一个功能?
- android - runOnUiThread 的目的是什么
- python - 来自sys.stdin的readlines()之后的input()?
- asp.net-core - DataTable 行返回未定义
- python - 在 Google Colab 中下载 h5 文件
- c# - 在c#中将8Mono像素数据数组转换为24位图像
- matlab - 如何检查矩阵的元素是否在MATLAB中?
- python - Discord 机器人复制和粘贴
- python - 在 windows 7 PC 版本中未正确启动使用 firefox 配置文件创建的 Zoom 会议 URL