2017-05-02 14 views
0

가 나는 제품이 제품백그라운드 작업을 지금 수행하는 방법?

나는 이것에 대한 작업을 만들

의 비용 테이블에 새 레코드를 생성하기 위해 콜백을 호출 저장하면 배경

Product.all.map { |product| product.save } 

에서이 작업을 실행하기를 원하지만 perform_now을 실행하면 백그라운드에서 실행되지 않고 perform_later이 오래 실행됩니다.

나는 지금 당장이 배경을 실행하고 싶다. 나는 스레드에서 이것을 실행할 수 있는지 잘 모르겠다. 내가 지연된 작업을 사용하고

, 여기에 작업

class UpdateProductCostsJob < ApplicationJob 
    queue_as :default 

    def perform 
    Product.all.map { |product| product.save } 
    end 
end 

내가, 당신이 만들 수있는이 모델은

class CostComposition < ApplicationRecord 
    before_save :update_product_costs 

    private 

    def update_product_costs 
     UpdateProductCostsJob.perform_now 
    end 
end 
+0

은 참조? 사이드 키크? Resque? ActiveJob 용으로 작성한 코드를 보여주십시오. – bkunzi01

+0

@ bkunzi01 그가 지연 근무 (질문 태그)를 사용하고 있다고 생각합니다 – bntzio

+0

@ bkunzi01 질문을 업데이트했습니다 –

답변

1

당신이 레일 (5)을 사용하고 있다고 가정 저장 될 때마다 실행하려면 우선 순위가 높은 대기열을 만들고 그 대기열 아래에서 작업을 만듭니다. 대기열이 하나 뿐인 경우 대기열에 작업을 추가 할 수있을뿐 아니라 해당 작업을 처리 할 시간을 지정할 수 있습니다.

UpdateProductCostJob.set(wait_until: Time.now + 5.minutes).perform_later 

당신이 당신의 백그라운드 작업을 실행하는 데 사용하고있는 http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job