1

我想在每个星期六晚上 11.45 运行一个调度程序,但是如果在 heroku 中不支持的任何时候使用gem,我们如何编写带有自定义间隔的 Heroku 调度程序?

回答:

Simple Scheduler 是一个调度插件,旨在与 Sidekiq 和 Heroku Scheduler 一起使用。它使您能够以任何间隔调度任务,而无需添加时钟进程。Heroku Scheduler 只允许您每 10 分钟、每小时或每天安排一次任务。

第 1 步:gem "simple_scheduler" 第 2 步:捆绑 第 3 步:在 Rails 项目中创建文件 config/simple_scheduler.yml:

# Global configuration options. These can also be set on each task.
queue_ahead: 360 # Number of minutes to queue jobs into the future
tz: nil # The application time zone will be used by default if not set

# Runs once every 2 minutes
simple_task:
  class: "SomeActiveJob"
  every: "2.minutes"

# Runs once every day at 4:00 AM. The job will expire after 23 hours, which means the
# job will not run if 23 hours passes (server downtime) before the job is actually run
overnight_task:
  class: "SomeSidekiqWorker"
  every: "1.day"
  at: "4:00"
  expires_after: "23.hours"

# Runs once every half hour, starting on the 30 min mark
half_hour_task:
  class: "HalfHourTask"
  every: "30.minutes"
  at: "*:30"

# Runs once every week on Saturdays at 12:00 AM
weekly_task:
  class: "WeeklyJob"
  every: "1.week"
  at: "Sat 0:00"
  tz: "America/New_York"

第 4 步:将 rake 任务添加到 Heroku Scheduler 并将其设置为每 10 分钟运行一次:rake simple_scheduler

有关更多信息,您可以点击以下链接,

https://github.com/simplymadeapps/simple_scheduler

4

1 回答 1

0

这很容易实现。假设我们有一个名为 example_task 的任务,我们可以这样做:

example_task:
  class: "ExampleJob"
  every: "1.week"
  at: "Sat 23:45"

请注意,ExampleJob必须扩展ActiveJob::Base和实现将保存任务逻辑的 perform 方法。

于 2017-10-15T14:29:45.693 回答