class EmmyExtends::Thin::Controller

Attributes

app[RW]
backend[RW]
config[RW]
server[RW]

Public Class Methods

new(config, app, opts={}) click to toggle source
Calls superclass method
# File lib/emmy_extends/thin/controller.rb, line 9
def initialize(config, app, opts={})
  @app = app
  @config = config.is_a?(Hash) ? EmmyHttp::Configuration.new(config) : config
  options = {
    environment:    config.environment,
    address:        config.url.host,
    port:           config.url.port,
    pid:            config.pid,
    user:           config.user,
    group:          config.group,
    log:            config.log || File.join(Dir.pwd, "log/#{config.backend}.log")
  }

  if config.ssl
    options.merge!(
      ssl: true,
      ssl_key_file:       config.ssl.private_key_file,
      ssl_cert_file:      config.ssl.cert_chain_file,
      ssl_disable_verify: !config.ssl.verify_peer,
      ssl_version:        config.ssl.ssl_version
    )
  end

  super(option_defaults.merge(options.merge(opts)))
  setup
end

Public Instance Methods

setup() click to toggle source
# File lib/emmy_extends/thin/controller.rb, line 39
def setup
  if @options[:socket]
    @server = ::Thin::Server.new(@options[:socket], @options)
  else
    @server = ::Thin::Server.new(config.url.host, config.url.port, @options)
  end
  server.backend.url = config.url

  # Set options
  server.pid_file                       = @options[:pid]
  server.log_file                       = @options[:log]
  server.timeout                        = @options[:timeout]
  server.maximum_connections            = @options[:max_conns]
  server.maximum_persistent_connections = @options[:max_persistent_conns]
  server.threaded                       = @options[:threaded]
  server.no_epoll                       = @options[:no_epoll] if server.backend.respond_to?(:no_epoll=)
  server.threadpool_size                = @options[:threadpool_size] if server.threaded?

  # ssl support
  if @options[:ssl]
    server.ssl = true
    server.ssl_options = {
      private_key_file: @options[:ssl_key_file],
      cert_chain_file: @options[:ssl_cert_file],
      verify_peer: !@options[:ssl_disable_verify],
      ssl_version: @options[:ssl_version]
    }
  end

  # Detach the process, after this line the current process returns
  server.daemonize if @options[:daemonize]

  # +config+ must be called before changing privileges since it might require superuser power.
  server.config

  server.change_privilege @options[:user], @options[:group] if @options[:user] && @options[:group]

  server.app = app

  #server.on_restart { Thin::Command.run(:start, @options) }

  # just return thin-backend
  @backend = server.backend
end
start() click to toggle source
# File lib/emmy_extends/thin/controller.rb, line 36
def start
end
to_a() click to toggle source
# File lib/emmy_extends/thin/controller.rb, line 84
def to_a
  @backend.to_a
end

Private Instance Methods

option_defaults() click to toggle source
# File lib/emmy_extends/thin/controller.rb, line 90
def option_defaults
  {
    backend:              EmmyExtends::Thin::Backend,
    threaded:             false,
    no_epoll:             false,
    chdir:                Dir.pwd,
    #environment:          'development',
    #address:              '0.0.0.0',
    #port:                 3434,
    timeout:              0, #sec
    #pid:                  "tmp/pids/thin.pid",
    #log:                  File.join(Dir.pwd, "log/server.log"),
    max_conns:            1024,
    max_persistent_conns: 100,
    require:              [],
    wait:                 30, #sec
    #daemonize:            false
  }
end