首页 文章

每周Heroku调度程序?

提问于
浏览
6

如何让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 回答

  • 6

    设置日常工作,并在工作中检查星期几是星期日(或任何一天) . 如果是那天,请运行该作业 . 如果不是那一天,什么也不做,退出 .

    编辑:我想的更像

    require 'date'
    task :weeklydelete do
      if Date.today.wday.zero?
        runner "Event.clear_expired"
        runner "Activity.clear_expired"
      end
    end
    

    记录到一个文件的东西不会在heroku上工作,我不确定你在使用什么时间的东西,但我担心如果调度程序运行它不完全是3,那东西可能不起作用 .

  • 0

    我找到了一个很好的答案here . 只需在Heroku Scheduler中使用bash脚本,该脚本在运行命令之前检查星期几:

    if [ "$(date +%u)" = 1 ]; then MY_COMMAND; fi   # only run on Mondays
    
  • 4

    Date类有一些非常棒的帮助器方法 . 所以, Date.today.wday.zero? 可缩短为 Date.today.sunday?

  • 6

    上面的想法是关于运行每日工作,但如果一周中的某一天不是您希望工作运行的那一天,则让它退出而不运行是一个很好的解决方案 . 但是,如果你有一个工作dyno运行Sidekiq或DelayedJob(或允许预定作业的任何其他排队方案),还有另一个解决方案,即为作业队列播种工作,直到你的星期几你才能运行需要 .

    这种方法比检查一周中的特定日子更清洁,但只有在您已经使用至少一个后台工作人员dyno和/或价格敏感度不是问题时才有意义 .

相关问题