2009-07-14 3 views
2

J'ai constaté que je devais souvent implémenter une sorte de planificateur dans les applications que je développe. Les applications peuvent aller de tâches de maintenance simples à assez complexes. Jusqu'à présent, mon approche consistait à configurer des tâches cron qui effectuaient essentiellement le traitement par lots des commandes en file d'attente. Par exemple, j'ai cron invoquant un script (je travaille dans RubyOnRails donc c'est un script runner) toutes les 5 minutes, qui vérifie s'il y a des éléments à traiter, puis délègue les tâches aux gestionnaires appropriés.Quelle approche recommanderiez-vous pour implémenter des ordonnanceurs Web?

Cela fonctionne, mais pour une raison quelconque ne semble pas être la meilleure approche. Pouvez-vous recommander quelque chose, ou avoir des commentaires à ce sujet?

Je travaille dans Ruby on Rails, mais il n'y a aucune raison que cette discussion soit limitée à RoR.

Merci,

Répondre

3

Un certain nombre de façons de le faire. Pour un projet que nous avons récemment développé, nous avons utilisé delayed_job, un excellent outil de travail asynchrone pour Rails. Nous pouvons définir un travail à exécuter toutes les 5 minutes, puis le travail crée un autre travail une fois que c'est fait, et ainsi de suite.

D'autres outils comme BackgroundRB prennent en charge un agent de style cron par défaut.

Je trouve souvent que faire une tâche de rake une fois par minute pour ajouter de nouveaux jobs à delayed_job fonctionne très bien; vous pourriez vouloir essayer cela. C'est le plus résistant et vous permet de garder toute la logique du timer dans Ruby tout en ne nécessitant pas de hacks ou de configurations potentiellement cassantes comme mon premier exemple delayed_job (par exemple, vous devez purger la file d'attente, vous devez réinitialiser tous vos jobs pour les obtenir fonctionner correctement).

Delayed_job est extrêmement facile à travailler et très piratable, donc si vous cherchez un endroit pour commencer c'est probablement aussi bon que n'importe où.

0

Vous ne voyez pas pourquoi vous n'utilisez pas cron et script/runner. L'avantage est que vous n'avez pas votre environnement Rails (en plus requis) toujours chargé, chargé seulement lorsque vous avez besoin d'exécuter le travail.

Inconvénient: cela dépend de la présence de cron ...?

+0

Oui, ce genre est d'un inconvénient. Je suppose que cela n'a pas d'importance pour quoi que ce soit que je m'héberge mais que faire si je dois fournir un paquet pour un client à installer? – Goro

+0

Vous pouvez l'ajouter à la fin de la crontab (nécessiterait sudo) –

1

Une autre suggestion consiste à créer votre propre démon personnalisé. Cela vous donnera la possibilité de faire à peu près tout ce dont vous avez besoin.

Il était recouvert d'une excellente Railscast screencast - http://railscasts.com/episodes/129-custom-daemon

Questions connexes