【问题标题】:Rails active job run daily at specific time according to time zoneRails 活动作业根据时区每天在特定时间运行
【发布时间】:2023-04-09 19:08:01
【问题描述】:

我有一个每天凌晨 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 完成这个?

我正在考虑先运行另一个作业以从数据库中获取所有时区并获取它们与服务器时区之间的差异,然后将每个时区传递给以下代码

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

但我不知道这是否是完成此任务的最佳方法,因为我将在第一份工作的运行中遇到另一个时间问题

【问题讨论】:

  • 这可能对https://github.com/ondrejbartas/sidekiq-cron#time-cron-and-sidekiq-cron有帮助

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


【解决方案1】:

您好,您可以在添加公司或更改时区时使用 rails 活动记录回调来更新工作。效率会高很多。

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

您只需设置一次所有当前作业时区

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多