Создайте рубинового демона, который интегрирует мою среду направляющих

Я должен создать рубинового демона, который будет использовать freeswitcher eventmachine библиотека для freeswitch.

С нескольких дней я как взгляд сети для лучшего решения создать рубинового демона, который интегрирует мою среду направляющих, особенно мои активные рекордные модели. Я имею, смотрят к превосходному скринкасту Ryan Bates (эпизоды 129 пользовательских демонов), но я не уверен, что это - все еще фактическое решение.

Как я делаю это хорошим способом?

8
задан Cœur 7 July 2019 в 07:31
поделиться

1 ответ

Я постоянно создаю демонов для своей рельсовой среды. Камень демонов действительно берет на себя всю работу. Вот небольшой шаблон, извлеченный из моего последнего приложения rails (script / yourdaemon), в качестве примера. Я использую гем eventmachine, но идея та же:

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

Это дает вам все обычные скрипты / yourdaemon [run | start | stop | restart], и вы можете передавать аргументы демону после "-". В производстве вы захотите использовать god или monit, чтобы убедиться, что демон будет перезапущен в случае его смерти. Повеселись!

8
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: