Rails活动作业根据时区在特定时间每天运行

时间:2017-02-28 08:33:55

标签: ruby-on-rails cron sidekiq rails-activejob

我有一个每天凌晨3点安排的活动作业。应用程序是SAAS,每个子域都有不同的时区。我要问的是如何根据每个公司的时区每隔凌晨3点运行后台作业,而不是在服务器时间运行一次。 我在我的数据库中有时区属性,每个公司都可以插入自己的属性。

我在我的sidekiq_schedule.yml

schedule_foo_job:
  cron: "0 3 * * *"
  class: "FooJob"
  queue: default
  active_job: true

并在作业文件中

class FooJob < ApplicationJob
  queue_as :default

  def perform(*args)
    DoSomeThing.new.run
  end
end

有没有办法用sidekiq_cron完成这个?

我正在考虑先让另一个Job运行来从DB获取所有时区,然后获取它们与服务器时区之间的差异,然后将每个时区传递给以下代码

FooJob.set(wait_until: "Pass the time here").perform_later

但是我不知道这是否是实现这一目标的最佳方法,因为我将在第一份工作的运行中遇到另一个时间问题

1 个答案:

答案 0 :(得分:0)

您好,您可以使用rails active active record backs在添加公司时更新作业或更改时区。它会更有效率。

在时区更新中找到具有唯一名称的作业,销毁它并根据时区创建新作业。

您需要设置所有当前作业时区