每周Heroku调度程序?

use*_*101 6 ruby-on-rails heroku ruby-on-rails-3 ruby-on-rails-4

如何让heroku调度程序每周运行一次?

这是不可能的,从我所看到的我只能按小时,每10分钟或每日任务安排,而不是每周一次.

如果没有,那么其他Heroku附加组件是什么可能允许我在生产中的每周贝司上运行作业(即cron作业)任务.

谢谢!

更新2:

  require 'date'
task :weeklydelete do
  if Date.today.wday.zero?
    runner "Event.clear_expired"
    runner "Activity.clear_expired"
  end
end
Run Code Online (Sandbox Code Playgroud)

更新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)
Run Code Online (Sandbox Code Playgroud)

lub*_*bar 10

我发现了一个伟大的答案在这里.只需在Heroku Scheduler中使用bash脚本,该脚本在运行命令之前检查星期几:

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

  • 我是否只需将您的bash脚本复制粘贴到Heroku Scheduler行中以使其正常工作?或者我必须创建一个bash脚本? (3认同)
  • 这太棒了,这是这个问题的最佳解决方案。你可以直接使用那条线@NishantRoy (2认同)

Wil*_*ill 8

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

编辑:我想的更像

require 'date'
task :weeklydelete do
  if Date.today.wday.zero?
    runner "Event.clear_expired"
    runner "Activity.clear_expired"
  end
end
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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