2010-04-16 4 views
8

J'ai besoin de construire un démon ruby ​​qui utilisera la bibliothèque de machine événementielle freeswitcher pour le FreeSwitch.Construire un démon ruby ​​qui intègre mon environnement de rails

Depuis quelques jours, je regarde le web pour trouver la meilleure solution pour construire un démon ruby ​​qui va intégrer mon environnement de rails, spécifiquement mes modèles de disques actifs. J'ai jeté un coup d'oeil à l'excellent screencast de Ryan Bates (démon personnalisé d'épisodes 129) mais je ne suis pas sûr que ce soit toujours une solution réelle.

Est-ce que quelqu'un sait un bon moyen de faire cela?

Merci à tous pour votre aide.

Répondre

8

Je crée des démons pour mes environnements de rails tout le temps. La gemme de démons prend vraiment tout le travail. Voici un petit modèle extrait de ma dernière application rails (script/yourdaemon), à titre d'exemple. J'utilise la gemme eventmachine, mais l'idée est la même:

#!/usr/bin/env ruby 
require 'rubygems' 
require 'daemons' 

class YourDaemon 

    def initialize 
    end 

    def dostuff 
    logger.info "About to do stuff..." 
    EventMachine::run { 
     # Your code here 
    } 
    end 

    def logger 
    @@logger ||= ActiveSupport::BufferedLogger.new("#{RAILS_ROOT}/log/your_daemon.log") 
    end 
end 

dir = File.expand_path(File.join(File.dirname(__FILE__), '..')) 

daemon_options = { 
    :multiple => false, 
    :dir_mode => :normal, 
    :dir  => File.join(dir, 'tmp', 'pids'), 
    :backtrace => true 
} 

Daemons.run_proc('your_daemon', daemon_options) do 
    if ARGV.include?('--') 
    ARGV.slice! 0..ARGV.index('--') 
    else 
    ARGV.clear 
    end 

    Dir.chdir dir 

    require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) 
    YourDaemon.new.dostuff 
end 

Cela vous donne tout le script d'habitude/yourdaemon [run | start | stop | restart], et vous pouvez transmettre des arguments dans le démon après un " - ". En production, vous devrez utiliser dieu ou monit pour vous assurer que le démon redémarre s'il meurt. S'amuser!

+0

Logan thnaks pour votre réponse. Je vais essayer avec votre modèle. – jjmartres

Questions connexes