Sha256: 9b80dd7dff8221415eae13a980b4de6ec3e45e2d45ac952a2c08a10e2bfe893b
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
require "redis" require "singleton" require "logger" require "fileutils" class DynportTools::EmbeddedRedis include Singleton attr_accessor :started, :base_path, :killed attr_writer :logger def initialize(options = {}) self.base_path = options[:base_path] || "/tmp" self.logger = options[:logger] || Logger.new($stderr) end def pid_path "#{base_path}/pids/redis.#{Process.pid}.pid" end def socket_path "#{base_path}/sockets/redis.#{Process.pid}.socket" end def pid if File.exists?(pid_path) pid = File.read(pid_path).strip pid.length > 0 ? pid : nil end end def running? !!(pid && IO.popen("ps -p #{pid} | grep redis-server").count > 0) end def start if !running? do_start! else log "already running with pid #{pid}" end connection end def do_start! [socket_path, pid_path].each { |path| FileUtils.mkdir_p(File.dirname(path)) } system(%(echo "#{config}" | redis-server -)) sleep 0.1 self.started = true log "started redis with pid #{pid}" at_exit do kill end end def started? !!self.started end def connection if !started? start end @connection ||= Redis.new(:path => socket_path) end def log(message) logger.info("EMBEDDED_REDIS: #{message}") end def logger @logger ||= Logger.new($stdout) end def killed? !!killed end def kill log "killing redis" if !killed? && pid log "killing #{pid}" system(%(kill #{pid})) FileUtils.rm_f(socket_path) self.killed = true end end def config [ "daemonize yes", "pidfile #{pid_path}", "port 0", "unixsocket #{socket_path}" ].join("\n") end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dynport_tools-0.2.17 | lib/dynport_tools/embedded_redis.rb |