2012-09-26 40 views
2

我目前正在創建一個rails應用程序,並想了解如何安排某些任務在特定時間運行。Schedule Rails任務在特定時間運行

例如,管理員希望在早上8:00將電子郵件發送給他的用戶,並且不想提早起牀發送該電子郵件。因此,他/她會想要安排當時的任務發送電子郵件。

那麼,有沒有一種方法,或者更好的還是一種創業板,它可以讓任務安排在特定時間運行?謝謝!

+0

活躍的工作可以做同樣的事情嗎? – dhaliman

回答

10

我的首選解決方案是Whenever寶石。

有了它,你有schedule.rb文件,指定當某些事情應該做的事,包括運行rake任務,執行方法,甚至執行任意shell命令:

例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文件中?例如,我想每分鐘撥打一個特定的方法,我可以只輸入「每分鐘做一次........結束」嗎? – user192249

+0

@ user192249除了schedule.rb之外,您不需要任何特殊文件 - 儘管我將所有任務都放到了一個或另一個類的類方法中。如上所述,只需使用'runner'調用它們即可。 – MrTheWalrus

+0

太棒了!非常感謝! – fuiiii