Sidekiqを使用して、各タイムゾーンで特定の時刻に実行する戦略は何ですか?Sidekiqはすべてのタイムゾーンで特定の時刻に実行する
例えば、私は世界中で以下の時間と時間帯に毎日のタスクを実行するためにSidekiqが必要:
... 8:00 PM EST 8:00 PM CST 8:00 PM MST 8:00 PM PST ...
Sidekiqを使用して、各タイムゾーンで特定の時刻に実行する戦略は何ですか?Sidekiqはすべてのタイムゾーンで特定の時刻に実行する
例えば、私は世界中で以下の時間と時間帯に毎日のタスクを実行するためにSidekiqが必要:
... 8:00 PM EST 8:00 PM CST 8:00 PM MST 8:00 PM PST ...
私はちょうど毎時の最初に同じ仕事をするでしょう。 1時間ごとにジョブを実行するにはcronを使用するか、recurring jobs in 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"]
あなただけで簡単にその時間帯に住んでいるあなたのデータベースからユーザー(あなたはこの形式で、ユーザーのタイムゾーンを保存仮定)をロードし、それらに電子メールを送信することができます
User.where(time_zone: 8am_time_zones).find_each do |user|
# email_newsletter(recipient: user)
end
Sidekiqは「毎日」のご使用の場合にはスケジューリング機構を持っていません。 wheneverのようなcronスケジューラが必要です。
サーバーがUTCに設定されていると仮定すると、あなたは自分のスケジュールを作成したい:
# EST 8pm
every 1.day, :at => '1:00 am' do
runner "MyModel.task_to_run_at_1_am_UTC"
end
# CST 8pm
every 1.day, :at => '2:00 am' do
runner "MyOtherModel.task_to_run_at_2_am_UTC"
end
1行でそれを行うには:
every '* 6,7,8,9,10 1 * *' do
runner "MyOtherModel.task_to_run_at_2_am_UTC"
end
はcron syntaxが処方されるかを見てみましょう。
その時刻をUTCに変換すると何が問題になりますか? – spickermann
すべての時間をデータベースにUTCで記録します。私の質問は明らかではないかもしれません...世界中のユーザーがおり、各ユーザーのタイムゾーンで午後8時に「毎日のダイジェスト」を送信したいと考えています。それは理にかなっていますか? @spickermann –
[Sidekiq Enterprise](http://sidekiq.org/products/enterprise)でもこれを行うことができますが、無料版とPro版にはこの機能は含まれていません。 – coreyward