2010-11-18 5 views
1

Je cours une application rails, qui doit avoir un processus continu en arrière-plan. L'idée est que les utilisateurs sont ajoutés de manière transactionnelle à une liste, qui est à l'intérieur du processus, puis couplés ensemble selon un algorithme qui s'exécute en continu.Rails fond processus/structure de données

Je ne peux pas faire l'algorithme simplement exécuté après chaque utilisateur est ajouté parce que nous avons aussi besoin d'exécuter l'algorithme si un utilisateur a été en attente d'un certain laps de temps.

Est-ce possible? J'ai fondamentalement besoin d'une structure de données qui est constamment en cours d'exécution et qui est accessible en différé en arrière-plan.

Merci!

Répondre

2

Vous pouvez même arbitrairement faire fonctionner n'importe quoi en arrière-plan. Il charge l'application rails en tant que travailleurs et les garde en mémoire, contrairement au script/coureur qui charge et décharge constamment l'application. DJ regarde le db à la recherche d'emplois. J'ai même mis en place un site où un autre serveur traitait les tâches d'arrière-plan séparément du serveur de l'application.

+0

pouvez-vous voir mon commentaire sur l'autre réponse? pourrait gérer les structures de données de fond? – Danny

+0

Pouvez-vous clarifier ou avoir un exemple de votre structure de données? Est-ce un hachage ou quelque chose qui est chargé avec l'utilisateur ou vit-il en mémoire dans toutes les demandes? Avec plusieurs des applications de travail en arrière-plan, vous pouvez transmettre des arguments qui sont ensuite sérialisés dans la base de données et rechargés. – Caleb

+0

Oui. Il s'agira donc probablement d'une grande structure arborescente constamment modifiée. Pensez-vous que c'est possible? Merci! – Danny

1

Découvrez Workling et Starling.

+0

donc je l'ai regardé, et je comprends les tâches de fond/méthodes que vous pouvez exécuter, mais je ne suis pas sûr de savoir comment cela me permettrait d'avoir une structure de données persistantes en cours d'exécution en arrière-plan. Imaginez un grand arbre binaire que je veux pouvoir mettre à jour constamment. Des idées? – Danny

0

Vous pouvez le faire en utilisant Cron et/ou un fichier de script shell ou d'un lot, et le râteau ou rail de script runner.

Avec Cron vous pouvez spécifier des intervalles le travail est exécuté, disons toutes les cinq minutes. Ou bien, vous pouvez écrire un script qui est lancé au démarrage du système, puis dort un certain temps, se réveille et exécute votre code, puis se rendort de nouveau, en boucle indéfiniment.

Ou vous pourriez écrire une boucle dans votre script qui exécute vos actions dort alors intérieurement, se réveiller et courir à nouveau, puis dormir à nouveau.

L'avantage d'utiliser du rail script runner est-il a accès à tout votre application Rails est au courant. L'inconvénient est que l'application prend plus de temps à démarrer car elle doit parcourir les routines d'initialisation de Rails chaque fois qu'elle est lancée, et c'est pourquoi j'ai mentionné faire une boucle en faisant quelque chose puis en dormant. Delayed_job fonctionne bien et est super facile à intégrer.