2016-07-25 6 views
0

컨트롤러 작업이 실행 된 후 3 분 후에 작업을 실행하려고합니다.X 분 후에 작업 시작

# in my controller 

def index 
    @books = Book.all 
    Delayed::Job.enqueue(ReminderJob.new(params[:user_id])) 
end 

그리고 ReminderJob.rb 파일 :

나는 DelayedJob와 함께,이 시도 인덱스 페이지에 액세스 할 때

class ReminderJob < Struct.new(:user_id) 
    def perform 
    p "run reminder job" 
    # do something 
    end 
    handle_asynchronously :perform, :run_at => Proc.new { 3.minutes.from_now } 
end 

그러나, 나는 로그 아무것도 볼 수없고, 3 분 후에 아무 일도 일어나지 않습니다.

내가 뭘 잘못 했니? sleep을 사용하지 않고 "지금부터 X 분 후에"작업을 실행하는 다른 권장 방법이 있습니까?

+0

당신이 읽게을 https://github.com/ ([공통 문제 번호의 아무것도-발생하지 않습니다] collectiveidea/delayed_job/wiki/Common-problems # 아무 일도 일어나지 않는다)? –

+0

빌트인 'ActiveJob'레일을 사용하지 않는 이유는 무엇입니까? – siegy22

+0

@RaVeN activeJob을 사용하여 "이 작업을 X 분 내에 시작하십시오"라고 말할 수있는 방법을 찾지 못했습니다. 이것이 가능한가 ? –

답변

1

이 글에서는 ActiveJob이라는 레일 구성 요소를 사용했습니다. here 설치 및 기본 사용법을 참조하십시오. 귀하의 경우에는

이 코드가 작동 것이다 :

def index 
    user = User.find(params[:user_id]) 
    ReminderJob.set(wait: 3.minutes).perform_later(user) 
end 

및 작업 :

class ReminderJob < ApplicationJob # or use ActiveJob::Base 
    def perform(user) 
    # do something with the user 
    end 
end 
관련 문제