2010-08-11 78 views

回答

5

看一看的寶石時,http://github.com/javan/whenever

這是偉大的與軌道具有明顯的DSL自動後臺任務。我們幾個月來一直在使用它的產品,它的工作原理非常輕巧。從他們的README一些例子:

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 

自述是很透徹,但也railscasts一個很好的截屏:http://railscasts.com/episodes/164-cron-in-ruby

它很容易與下面的代碼Capistrano的集成(從README複製):

after "deploy:symlink", "deploy:update_crontab" 

    namespace :deploy do 
    desc "Update the crontab file" 
    task :update_crontab, :roles => :db do 
     run "cd #{release_path} && whenever --update-crontab #{application}" 
    end 
    end 

就機器而言,您可以使用本地配置文件,甚至可以在部署時使用符號鏈接config/schedule.rb文件。我想我會包括將在部署local_schedule.rb被符號鏈接,然後把這個在的config/schedule.rb

if File.exists?(File.dirname(__FILE__) + '/config/local_schedule.rb') 
    require File.dirname(__FILE__) + '/local_schedule.rb' 
end 
頂部的本地文件

你的日程安排將運行,但隨後包括任何地方,只要確保它之前的符號鏈接上面的帽子任務運行,你應該很好去。

我希望這有助於!

+0

我愛你的答案和railscast,謝謝!我唯一的一個訣竅是,做機器特定的東西的方式有點太複雜。由於Schedule.rb允許我們編寫ruby代碼,因此我想知道是否有方法來指定它。 我在這裏問了一個相關的問題:http://stackoverflow.com/questions/3550770/finding-out-deployment-machine-you-are-on-in-code-rails 我有道理嗎? – 2010-08-23 19:07:19