2017-02-28 6 views
0

매일 오전 3시에 예약 된 활성 작업이 있습니다.이 응용 프로그램은 각 하위 도메인마다 다른 시간대를 갖는 SAAS입니다. 내가 묻는 것은 각 회사의 시간대별로 3 시간마다 백그라운드 작업이 서버 시간대에 한 번씩 실행되도록하는 방법입니다. DB에 타임 존 속성이 있습니다. 각 회사는 자체 타임 스탬프 속성을 삽입 할 수 있습니다. sidekiq_cron으로이 작업을 수행 할 수있는 방법은 내가 내 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 

에있는

있습니까?

내가 다음 코드

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

하지만 난에 각각 전달 먼저 다른 작업 실행이 DB에서 모든 시간대를 얻을 수 있도록하고 서버 시간대의 차이를 얻을 생각 그게 가장 좋은 방법이 아니면 첫 번째 작업의 실행과 다른 타이밍 문제가있을 것입니다 모르겠다

답변

0

안녕 당신은 회사를 추가 할 때마다 작업을 업데이 트하는 활성 레코드 콜백을 사용할 수 있습니다 시간대를 변경합니다. 훨씬 더 효율적입니다.

시간대를 업데이트하면 고유 한 이름으로 작업을 찾고이를 삭제하고 시간대에 따라 새 작업을 만듭니다.

현재 작업 시간대를 한 번만 설정해야합니다.