Sidekiq在每个时区的特定时间执行

Cha*_*lor 2 ruby ruby-on-rails sidekiq

使用Sidekiq,在每个时区的特定时间执行它的策略是什么?

例如,我需要Sidekiq每天在世界各地的以下时间和时区每天执行一项任务:

... 8:00 PM EST 8:00 PM CST 8:00 PM MST 8:00 PM PST ...

spi*_*ann 5

我只会在每个小时的开始运行相同的工作。您可能想使用cron每小时运行一次作业,或者查看此列表以了解如何在Sidekiq中创建重复作业

作为第一步,您需要确定当前所在的所有时区8AM。例如这样:

8am_time_zones = ActiveSupport::TimeZone.all
                                        .select { |tz| tz.now.hour == 8 }
                                        .map { |tz| tz.tzinfo.name }
#=> ["America/Los_Angeles", "America/Tijuana", "America/Phoenix"]
Run Code Online (Sandbox Code Playgroud)

使用此列表,您可以轻松地从数据库中加载位于该时区的用户(假设您以这种格式存储了用户的时区)并向他们发送电子邮件:

User.where(time_zone: 8am_time_zones).find_each do |user|
  # email_newsletter(recipient: user)
end
Run Code Online (Sandbox Code Playgroud)