2010-08-11 4 views

Répondre

5

un coup d'oeil à la chaque fois bijou, http://github.com/javan/whenever

Il est idéal pour l'automatisation des tâches cron avec des rails avec un DSL clair. Nous l'utilisons depuis plusieurs mois et cela fonctionne et est très léger. Voici quelques exemples de leur 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 

Le README est très complet, mais il y a aussi un bon screencast sur Railscasts: http://railscasts.com/episodes/164-cron-in-ruby

Il intègre facilement à Capistrano avec le code suivant (copié à partir 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 

En ce qui concerne les machines, vous pouvez utiliser un fichier de configuration local ou même créer un lien symbolique avec le fichier config/schedule.rb lors du déploiement. Je pense que je voudrais inclure un fichier local qui serait un lien symbolique sur Deploy local_schedule.rb puis mettre ce en haut de la config/schedule.rb

if File.exists?(File.dirname(__FILE__) + '/config/local_schedule.rb') 
    require File.dirname(__FILE__) + '/local_schedule.rb' 
end 

Votre calendrier courrait mais inclure quoi que ce soit local, assurez-vous qu'il est un lien symbolique avant la la tâche de chapeau ci-dessus est exécutée et vous devriez être bon pour aller.

J'espère que cela aide!

+0

J'aime votre réponse et le railcast, merci! Mon seul petit problème est que la façon de faire les trucs spécifiques à la machine est un peu trop compliquée. Depuis Schedule.rb nous permet d'écrire du code ruby, je me demande s'il existe un moyen de le spécifier à la place. J'ai posé une question connexe ici: http://stackoverflow.com/questions/3550770/finding-out-deployment-machine-you-are-on-in-code-rails Suis-je logique? –

Questions connexes