如何让heroku调度程序每周运行一次?
这是不可能的,从我所看到的我只能按小时,每10分钟或每日任务安排,而不是每周一次 .
如果没有,那么其他Heroku附加组件可能允许我在 生产环境 中每周一次的bassis上运行作业(即cron作业)任务 .
谢谢!
Update 2:
require 'date'
task :weeklydelete do
if Date.today.wday.zero?
runner "Event.clear_expired"
runner "Activity.clear_expired"
end
end
Update 2.5:
$heroku run bundle exec rake weeklydelete -a friendiosenew
Running `bundle exec rake weeklydelete` attached to terminal... up, run.6194
rake aborted!
undefined local variable or method `path' for main:Object
/app/lib/tasks/weeklydelete.rake:2:in `block in <top (required)>'
Tasks: TOP => weeklydelete
(See full trace by running task with --trace)
4 回答
设置日常工作,并在工作中检查星期几是星期日(或任何一天) . 如果是那天,请运行该作业 . 如果不是那一天,什么也不做,退出 .
编辑:我想的更像
记录到一个文件的东西不会在heroku上工作,我不确定你在使用什么时间的东西,但我担心如果调度程序运行它不完全是3,那东西可能不起作用 .
我找到了一个很好的答案here . 只需在Heroku Scheduler中使用bash脚本,该脚本在运行命令之前检查星期几:
Date类有一些非常棒的帮助器方法 . 所以,
Date.today.wday.zero?
可缩短为Date.today.sunday?
上面的想法是关于运行每日工作,但如果一周中的某一天不是您希望工作运行的那一天,则让它退出而不运行是一个很好的解决方案 . 但是,如果你有一个工作dyno运行Sidekiq或DelayedJob(或允许预定作业的任何其他排队方案),还有另一个解决方案,即为作业队列播种工作,直到你的星期几你才能运行需要 .
这种方法比检查一周中的特定日子更清洁,但只有在您已经使用至少一个后台工作人员dyno和/或价格敏感度不是问题时才有意义 .