Il semble que votre application requiert ce qui est généralement appelé un processus d'arrière-plan ou travailleur. Ceci est une exigence assez commune pour toute application web modérément complexe.
Je suppose que je dois créer un processus séparé qui s'exécute en arrière-plan pour répondre aux messages corrects?
Oui, vous avez raison. Bien qu'il soit parfaitement possible d'utiliser des threads pour gérer les tâches d'arrière-plan (dans votre cas, lire et traiter les messages de RabbitMQ), l'itinéraire standard et recommandé pour une application Rails consiste à exécuter un processus d'arrière-plan séparé.
Si c'est le cas, est-il possible de réutiliser les modèles/bibliothèques qui sont déjà dans l'application rails?
Absolument. Le moyen le plus simple possible pour que cela fonctionne est d'utiliser le built in runner command de Rails.
Une autre option consiste à créer un script ruby qui charge votre application Rails. Par exemple, vous pouvez créer le fichier my_script.rb
dans la racine de votre projet, ce qui pourrait ressembler à ceci:
# Load my application:
require File.join(File.dirname(__FILE__), 'config/environment.rb')
# Now you can access your Rails environment as normal:
MyModel.all.each { |x| x.do_something }
Si vos besoins deviennent plus complexes, ou vous trouvez que vous devez exécuter plus d'un processus d'arrière-plan Pour suivre le volume de données que vous devez traiter, vous pouvez regarder l'un des many available libraries and frameworks qui peut vous aider. Une fois que vous avez créé votre processus d'arrière-plan, vous devez pouvoir l'exécuter en continu lorsque vous le déployez sur votre serveur de production.Bien qu'il soit possible d'utiliser des bibliothèques comme daemons, comme suggéré par ctcherry, je recommanderais d'utiliser un outil dédié tel que upstart (en cas de déploiement sur ubuntu) ou runit. Un bon résumé des options les plus populaires est available here.
Un de mes amis utilise https://github.com/tobi/delayed_job pour effectuer des tâches d'arrière-plan. Je ne sais pas grand-chose à ce sujet (pas un dev de rails), mais peut-être regarder dedans? – notJim