构建一个整合我的rails环境的ruby守护进程

时间:2010-04-16 14:41:24

标签: ruby-on-rails ruby daemon

我需要构建一个ruby守护进程,它将freeswitcher eventmachine库用于freeswitch。

因为几天我在网上寻找最佳解决方案来构建一个可以整合我的rails环境的ruby守护进程,特别是我的活跃记录模型。我看一下优秀的Ryan Bates截屏视频(剧集129自定义守护进程),但我不确定它仍然是一个真正的解决方案。

有没有人知道这样做的好方法?

感谢大家的帮助。

1 个答案:

答案 0 :(得分:8)

我一直为我的rails环境构建守护进程。守护进程宝石真正完成了它的所有工作。这是从我最新的rails应用程序(script / yourdaemon)中提取的一个小模板,作为示例。我使用eventmachine gem,但想法是一样的:

#!/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来确保守护进程在它死亡时重新启动。玩得开心!