首页 > 解决方案 > 使用自定义时间安排任务

问题描述

配置/时间表.rb

def timezoned time
  Time.zone = "Pacific Time (US & Canada)"
  Time.zone.parse(time).utc
end

every 1.day, at: timezoned('5:30 am') do
  runner 'App1::Task1.perform_async'
end

every 1.day, at: timezoned('5:31 am') do
  runner 'App1::Task2.perform_async'
end

every 1.day, at: timezoned('5:33 am') do
  runner 'App2::Task1.perform_async'
end

every 1.day, at: timezoned('5:34 am') do
  runner 'App2::Task2.perform_async'
end

every 1.day, at: timezoned('5:36 am') do
  runner 'App3::Task1.perform_async'
end

every 1.day, at: timezoned('5:37 am') do
  runner 'App3::Task2.perform_async'
end

every 1.day, at: timezoned('5:40 am') do
  runner 'App4::Task1.perform_async'
end

every 1.day, at: timezoned('5:41 am') do
  runner 'App4::Task2.perform_async'
end

every 1.day, at: timezoned('5:42 am') do
  runner 'App4::Task3.perform_async'
end

every 1.day, at: timezoned('5:43 am') do
  runner 'App5::Task4.perform_async'
end

我正在使用 Sidekiq 和任何时候 gem 来安排 Rails 中的作业。以上是我的 schedule.rb。有没有办法以比上述更好的方式安排任务?(例如时间 + 1.分钟或时间 + 2.分钟)

如果有任何更好的方法来安排上述任务,这将是有帮助的。

标签: ruby-on-railstimezonesidekiqwhenever

解决方案


选项1:

因为这是一个 Ruby 代码,您可以动态迭代应用程序、任务数组并动态设置调度程序

选项 2:您实际上可以让每个 :minute do runner 'AppTaskRunner.perform_async' end

在 AppTaskRunner 启动每个应用程序所需的任务取决于您的逻辑


推荐阅读