2014-10-08 2 views
2

나는 갈퀴 작업을 실행할 때마다 보석을 사용하고 있습니다. schedule.rb의 코드는 다음과 같습니다.테이블 열을 기준으로 작업을 예약하는 방법은 무엇입니까?

every 1.day, :at => '11:00 am' do 
    rake "notifications:run_mailer" 
end 

위의 코드는 매일 오전 11시에 레이크 작업을 실행하고 있습니다. 이제 나는 이것을 바꾸고 싶다. 테이블 열을 기반으로이 레이크 작업을 실행하고 싶습니다. 이를 위해 나는 scheduler.rb라는 테이블과 run_at 컬럼을 만들었다. run_at 열 날짜와 시간을 기반으로 레이크 작업을 실행해야합니다. 그렇게하는 방법? 테이블 이름을 가정

답변

2

1 단계 :

먼저 우리는 그 다음 schedule.rb에있는 모든 파일을로드 할 경우에만 우리는 액티브 쿼리를 실행할 수 있습니다.

액티브 쿼리를 실행하고 시간을 얻을 : 아래의 명령

require File.expand_path(File.dirname(__FILE__) + "/environment") 

2 단계 수행 할 수

.

run_at=Scheduler.last.run_at 
    time=[run_at.hour.to_s,run_at.min.to_s].join(":") 
    every 1.day, :at => time do 
    rake "notifications:run_mailer" 
    end 

3 단계 :

우리는 명령 아래 사용 할 때마다의 crontab을 업데이트해야합니다.

system "whenever --update-crontab" 

시스템 키워드는 레일스 코드에서 linux terminal 명령을 실행하는 데 사용됩니다.

1

Scheduler입니다 :

Scheduler.find(:all).each { |scheduler| 
    every 1.day, :at => scheduler.run_at do 
    rake scheduler.task_to_run 
    end 
} 

있습니다,이 코드는 매 실행에 크론 작업을 추가 할 것입니다. 이것은 잠시 후 거대한 양의 cronjobs로 이어질 것입니다. ""에 대한 추가 점검은 이미 예정된 작업이었습니다 "이어야합니다.

희망이 있습니다.

+0

throwing uninitialized constant 언제든지 :: JobList :: Scheduler –

+0

'Scheduler' 클래스로 파일을 요구하십시오. – mudasobwa

+0

참고 :'find (: all)'는 모든 데이터를 한 번에로드하려고 시도하지만 대신에 : find_each를 사용합니다. – Surya

관련 문제