2017-04-12 6 views
0

Sidekiq을 사용하여 모든 시간대의 특정 시간에 실행되도록하는 전략은 무엇입니까?모든 시간대에 특정 시간에 실행되는 Sidekiq

예를 들어, 나는 전 세계에 걸쳐 다음과 같은 시간과 시간대에 매일 작업을 수행 할 Sidekiq 필요합니다

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

+0

그 시간을 UTC로 변환 할 때 잘못된 점은 무엇입니까? – spickermann

+0

우리는 모든 시간을 데이터베이스에 UTC로 기록합니다. 어쩌면 나의 질문은 분명하지 않다 ... 우리는 전세계 사용자를 보유하고 있으며 각 사용자의 시간대에서 오후 8시에 "일별 다이제스트"를 보내고 싶다. 말이 돼? @spickermann –

+0

[Sidekiq Enterprise] (http://sidekiq.org/products/enterprise)는이 작업을 수행 할 수 있지만 무료 및 Pro 버전에는이 기능이 포함되어 있지 않습니다. – coreyward

답변

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 
0

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 

한 줄에서 작업을 수행하려면 :

every '* 6,7,8,9,10 1 * *' do 
    runner "MyOtherModel.task_to_run_at_2_am_UTC" 
end 

cron syntax 공식화하는 방법을 살펴 보자.

+0

우리 서버는 UTC로 설정되어 있습니다. 그러나 특정 시간 (예 : 오후 8시)마다 모든 시간대에서 동일한 반복 작업 (예 :'MyModel.task_1')을 실행하려고합니다. '언제든지 '보석으로 가능합니까? –

+0

예, cron 구문 만 사용하면됩니다. – Anthony

+0

내 대답 업데이트 @ChadTaylor – Anthony