2012-09-26 4 views
2

현재 레일즈 응용 프로그램을 만들고 있는데 특정 시간에 특정 작업을 실행하도록 예약하는 방법을 알고 싶습니다.일정 레일 특정 시간에 실행할 작업

예 : 관리자는 아침 8시에 사용자에게 이메일을 보내려하고 이메일을 보내기 위해 일찍 일어나기를 원하지 않습니다. 그러므로 그/그녀는 그 시간에 이메일을 보내도록 작업을 예약하려고합니다.

그래서 특정 시간에 작업을 실행하도록 예약 할 수있는 방법이 있습니까? 감사!

+0

활성 작업이 동일한 작업을 수행 할 수 있습니까? – dhaliman

답변

10

여기서 가장 선호하는 해결책은 Whenever 보석입니다. 그와

, 당신은 어떤 일이, 레이크 작업을 실행하는 방법을 실행, 또는 임의의 쉘 명령 실행을 포함하여, 수행되어야 할 때 지정 schedule.rb 파일이 있습니다 뻔뻔하게,

예 schedule.rb 파일을 복사를 추가 정보 언제든지 :

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 

every 1.day, :at => '4:30 am' do 
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning" 
end 

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
end 

every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday 
    runner "Task.do_something_great" 
end 

every '0 0 27-31 * *' do 
    command "echo 'you can use raw cron syntax too'" 
end 

# run this task only on servers with the :app role in Capistrano 
# see Capistrano roles section below 
every :day, :at => '12:20am', :roles => [:app] do 
    rake "app_server:task" 
end 

나는 매일 이메일을 보내는 것을 포함하여 많은 작업을 위해 사용할 수 있습니다.

+0

감사! 메서드를 저장하기 위해 작업 파일을 만들어야합니까, 아니면 그냥 schedule.rb 파일에 메서드를 추가 할 수 있습니까? 예를 들어 매분마다 특정 메소드를 호출하고 싶습니다. "every.minute do ........ end"를 입력하면됩니까? – user192249

+0

@ user192249 schedule.rb 외의 특별한 파일은 필요하지 않습니다. 모든 작업을 하나 또는 다른 클래스의 클래스 메소드로 만들지 만. 위와 같이'러너 '를 사용하여 호출하십시오. – MrTheWalrus

+0

환상적 !! 정말 고맙습니다! – fuiiii

관련 문제