2012-01-17 3 views
0

좋아요. 주문 테이블에 end_date라는 필드가있는 mysql 데이터베이스로 레일스 애플리케이션을 작성합니다. 이 필드는 관리자가 관리합니다. end_date 필드보다 2 주 앞선 cronjob이 필요합니다. 어떻게하는지에 대한 아이디어. 또한db의 datetime을 기반으로 cron을 업데이트하는 방법

every 1.day, :at => '12:30 am' do 
    runner "Order.task_that_checks_date" 
end 

내 첫번째 생각은 매일 cron 작업을 실행 한 때마다 보석을 사용하여 그 값을 확인하지만 난 한 번만 년 크론 실행이 필요하면 내가 크론 일상을 실행 싫어하고 있습니다. 이것을 개선하는 방법에 대한 아이디어

답변

1

내가 생각할 수있는 문제에 대한 가장 매끄러운 해결 방법은 앱의 어딘가에 "next_cron"날짜를두고 after_save 후크에서 업데이트하는 것입니다. 논리는 앱에서 가장 빠른 end_date를 찾고 그 다음 2 주 전에 "next_cron"날짜를 설정하는 것입니다. 해당 날짜까지 cron이 전혀 실행되지 않거나 매일 next_cron 일인지 확인하고 그 일을하거나 종료합니다.

사실 내가 말한 바에 따르면 매일 매일 크론을 실행하는 것이 실제로 더 효과적이라고 생각하며 취해야 할 조치가 있는지 확인하십시오. 그것은 당신이 시스템에 넣을 것으로 예상되는 작업의 수에 따라 다르지만, 일반적으로 사용자 인터페이스를 사용하는 것이 최대 절전 시간 인 0.05 초를 초과하는 경우보다 아침에 3 초에 백그라운드 프로세스를 사용하게하는 것이 일반적입니다. 교통 시간.

관련 문제