ruby on rails - Heroku调度器每周



如何使heroku调度器每周运行一次?

这可能吗?从我所看到的,我只能安排每小时、每10分钟或每天的任务,而不能安排每周的任务。

如果没有,还有什么其他的Heroku add -on可以让我在生产环境中每周运行一次作业(即cron作业)任务?

谢谢!

更新2:

  require 'date'
task :weeklydelete do
  if Date.today.wday.zero?
    runner "Event.clear_expired"
    runner "Activity.clear_expired"
  end
end
更新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)

我在这里找到了一个很好的答案。只需在Heroku Scheduler中使用一个bash脚本,在运行命令之前检查一周中的日期:

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

设置每日作业,并在作业中检查一周中的哪一天是星期日(或任意一天)。如果是那天,运行任务。如果不是那天,什么都不做,然后退出。

编辑:我想更像

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

日志到文件的东西不会在heroku上工作,我不确定你使用什么时间的东西,但我担心如果调度程序运行它不是在3,那东西可能无法工作。

Date类有一些非常棒的辅助方法。因此,Date.today.wday.zero?可以缩写为Date.today.sunday?

上面关于运行每日作业的想法,但是如果一周中的某一天不是您想要运行的作业,则让它在不运行的情况下退出,这是一个很好的解决方案。但是,如果您有一个运行Sidekiq或DelayedJob(或任何其他允许计划作业的队列方案)的工作动态,那么还有另一种解决方案,即在作业队列中播种作业,这些作业直到您需要的那一天才会运行。

这种方法比检查一周中特定的一天要干净一些,但是只有在您已经使用了至少一个后台worker动态并且/或者价格敏感性不是问题时,它才有意义。

相关内容

  • 没有找到相关文章

最新更新