當不同的機器有不同的工作要做時,在rails上運行cron作業的最佳方式是什麼?在rails上運行cron作業(部署在多個服務器上)
例如,服務器1運行cron作業A,而服務器運行2的cron作業B
是否有部署,當我們做一個常規的帽部署沿的cron文件的方法嗎?
當不同的機器有不同的工作要做時,在rails上運行cron作業的最佳方式是什麼?在rails上運行cron作業(部署在多個服務器上)
例如,服務器1運行cron作業A,而服務器運行2的cron作業B
是否有部署,當我們做一個常規的帽部署沿的cron文件的方法嗎?
看一看的寶石時,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
頂部的本地文件
你的日程安排將運行,但隨後包括任何地方,只要確保它之前的符號鏈接上面的帽子任務運行,你應該很好去。
我希望這有助於!
我愛你的答案和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