【问题标题】:Heroku scheduler weekly?Heroku 调度程序每周?
【发布时间】:2014-04-14 08:38:06
【问题描述】:

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

更新 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)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 heroku ruby-on-rails-4


    【解决方案1】:

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

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

    【讨论】:

    • 我是否可以将您的 bash 脚本复制粘贴到 Heroku Scheduler 行中以使其正常工作?还是我必须创建一个 bash 脚本?
    • 这太棒了,是这个问题的最佳解决方案。您可以直接使用@NishantRoy 的那条线
    • 我用什么代替 MY_COMMAND。例如,我的 dyno 的 procfile 是 worker: scrapy crawl main
    【解决方案2】:

    上面关于运行每日作业但如果一周中的哪一天不是您希望作业运行的那一天则让它退出而不运行的想法是一个很好的解决方案。但是,如果您有一个运行 Sidekiq 或 DelayedJob(或任何其他允许计划作业的排队方案)的工作人员测功机,还有另一种解决方案,即为作业队列播种直到您一周中的某一天才会运行的作业需要。

    这种方法比检查一周中的某一天要干净一些,但只有在您已经使用至少一个后台工作人员测功机和/或价格敏感性不是问题时才有意义。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        编辑:我的想法更像

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

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

        【讨论】:

        • 谢谢!我已经用代码更新了帖子,让我知道它对你来说是否还可以。干杯。
        • Perfect 现在就试试这个,谢谢!这将在每个星期日运行 - 还是每天运行?我只希望它在星期日执行,以避免过度使用 Herokus Dynos。
        • 它会每天运行,但在非星期天它几乎会立即退出,并且在非星期天最多只运行几秒钟。
        • 知道了——这很酷,基本上就是我想要的!不幸的是,当我运行“heroku run bundle exec rake weekdelete”时出现错误。我已经更新了原帖。怎么了?谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 2017-07-19
        相关资源
        最近更新 更多