Sha256: f9fd043b01e0504ceb2872d8a42b5903fa0f4fd3ff475081e3eef1802792496c

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

require 'envoy/client/trunk'
require 'envoy/client/option_parser'
require 'envoy/version'
require 'yaml'

def find_config
  dirs = Dir.pwd.split("/")
  r = dirs.reduce([]) do |m, x|
    [[*m[0], x], *m]
  end.map do |p|
    p.join("/") + "/.envoy"
  end.each do |p|
    return p if File.exist?(p)
  end
  false
end

def load_config
  if path = find_config
    conf = YAML.load(File.read(path))
    Array(conf).each do |conf|
      if conf["rails"]
        conf["dir"] = conf["rails"]
        conf["pidfile"] = "tmp/pids/server.pid"
        conf["command"] = "rails s -p %{local_port}"
        conf["delay"] = 10
      elsif conf["rackup"]
        conf["dir"] = conf["rackup"]
        conf["command"] = "rackup -p %{local_port}"
        conf["delay"] = 10
      end
      conf["host"] ||= conf["dir"].split("/")[-1] if conf["dir"]
      conf["dir"] = File.expand_path(conf["dir"], path + "/..") if conf["dir"]
    end
  else
    [{}]
  end
end

options = parse_options

unless EM.reactor_running?
  EM.run do
    Signal.trap("INT") do
      $exiting = true
      EventMachine.stop
    end
    Signal.trap("TERM") do
      $exiting = true
      EventMachine.stop
    end
    load_config.each do |config|
      config = config.merge(options)
      config["local_port"] ||= config["command"] ? rand(16383) + 49152 : 80
      config["hosts"] ||= [config.delete("host")] if config["host"]
      config = config.each_with_object({}) do |(k, v), h|
        h[k.to_sym] = v
      end
      Envoy::Client::Trunk.start config
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
envoy-proxy-0.2.3 lib/envoy/client/command.rb
envoy-proxy-0.2.2 lib/envoy/client/command.rb