2010-04-16 6 views
8

Ich muss einen Ruby-Daemon erstellen, der die freeswitcher Eventmachine-Bibliothek für Freeswitch verwendet.Erstellen Sie einen Ruby-Daemon, der meine Rails-Umgebung integriert

Seit ein paar Tagen suche ich im Web nach der besten Lösung, um einen Ruby-Daemon zu bauen, der meine Rails-Umgebung integrieren wird, speziell meine aktiven Record-Modelle. Ich schaue mir den exzellenten Ryan Bates Screencast an (Episoden 129 Custom Daemon), aber ich bin mir nicht sicher, ob das immer noch eine echte Lösung ist.

Kennt jemand einen guten Weg, das zu tun?

Vielen Dank für Ihre Hilfe.

Antwort

8

Ich baue Dämonen für meine Schienen Umgebungen die ganze Zeit. Das Dämonen-Juwel macht wirklich die ganze Arbeit daraus. Hier ist eine kleine Vorlage aus meiner neuesten Rails-App (script/yourdaemon) als Beispiel. Ich benutze das eventmachine Juwel, aber die Idee ist die gleiche:

#!/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 

Dies gibt Ihnen alle üblichen Skript/yourdaemon [run | start | stop | restart], und Sie können Argumente in den Dämon nach einem Pass " - ". In der Produktion solltest du god oder monit verwenden, um sicherzustellen, dass der Daemon neu gestartet wird, wenn er abstürzt. Habe Spaß!

+0

Logan Thnaks für Ihre Antwort. Ich werde es mit deiner Vorlage versuchen. – jjmartres

Verwandte Themen