2011-10-10 4 views
2

사용자가 여러 부분으로 구성된 응용 프로그램 프로세스를 진행하는 시스템이 있습니다. 사용자가 진행 상황을 저장하고 나중에 다시 돌아 오는 경우가 있습니다.delayed_job 대 cron

48 시간 내에 다시 오지 않으면 사용자에게 전자 메일을 보내려고합니다. cron, delayed_job 또는 whenever을 사용하는 것이 가장 좋을까요?

콘솔에서 작업 (예 : bundle install 또는 rake db:migrate)을 실행할 때마다 cron도 실행되기 때문에 같은 날에 사용자가 여러 개의 알림을받는 경우가있을 수 있습니다.

이 용도에 대한 권장 사항은 무엇입니까?

답변

5

우선, Whenever와 Cron은 동의어입니다. 모두 당신이 Ruby를 사용하여 cronjob을 작성하는 방법을 제공 할 때마다 (나는 대단한데, 언제나 사랑합니다).

지연된 작업이 여기에 대한 대답이 아닙니다. 당신은 확실히 cronjobs를 사용하고 싶습니다. 응용 프로그램 모델에서 updated_at 값이 < 2.days.ago 인 응용 프로그램을 가져 와서 지원자에게 전자 메일을 보내는 메서드를 만듭니다.

def notify_stale_applicants 
    @stale_applications = Application.where('updated_at < ?', 2.days.ago) # or 48.hours.ago 
    @stale_applications.each do |app| 
    UserMailer.notify_is_stale(app).deliver 
    end 
end 

그리고 당신의 UserMailer :

every :day, :at => '8am' do 
    runner 'Application.notify_stale_applicants' 
end 
이 크론을 만들 때마다 사용

def notify_is_stale(application) 
    @application = application 
    mail(:to => application.user.email, :from => "Application Status <[email protected]>", :subject => "You haven't finished your Application!" 
end