yahns.git  about / heads / tags
sleepy, multi-threaded, non-blocking application server for Ruby
blob d48b34d1143ea9a4d4193cad78e19722a1e422bf 2788 bytes (raw)
$ git show the_metal:lib/yahns.rb	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
$stdout.sync = $stderr.sync = true

require 'unicorn' # pulls in raindrops, kgio, fcntl, etc, stringio, and logger
require 'sleepy_penguin'

# kill off some unicorn internals we don't need
# we'll probably just make kcar into a server parser so we don't depend
# on unicorn at all
[ :ClientShutdown, :Const, :SocketHelper, :StreamInput, :TeeInput,
  :SSLConfigurator, :Configurator, :TmpIO, :Util, :Worker, :SSLServer,
  :HttpServer ].each { |sym| Unicorn.__send__(:remove_const, sym) }

# yahns exposes no user-visible API outside of the config file
# Internals are subject to change.
module Yahns # :nodoc:
  # We populate this at startup so we can figure out how to reexecute
  # and upgrade the currently running instance of yahns
  # Unlike unicorn, this Hash is NOT a stable/public interface.
  #
  # * 0 - the path to the yahns executable
  # * :argv - a deep copy of the ARGV array the executable originally saw
  # * :cwd - the working directory of the application, this is where
  # you originally started yahns.
  #
  # To change your yahns executable to a different path without downtime,
  # you can set the following in your yahns config file, HUP and then
  # continue with the traditional USR2 + QUIT upgrade steps:
  #
  #   Yahns::START[0] = "/home/bofh/2.0.0/bin/yahns"
  START = {
    :argv => ARGV.map(&:dup),
    0 => $0.dup,
  }

  # We favor ENV['PWD'] since it is (usually) symlink aware for Capistrano
  # and like systems
  START[:cwd] = begin
    a = File.stat(pwd = ENV['PWD'])
    b = File.stat(Dir.pwd)
    a.ino == b.ino && a.dev == b.dev ? pwd : Dir.pwd
  rescue
    Dir.pwd
  end

  # Raised inside TeeInput when a client closes the socket inside the
  # application dispatch.  This is always raised with an empty backtrace
  # since there is nothing in the application stack that is responsible
  # for client shutdowns/disconnects.
  class ClientShutdown < EOFError # :nodoc:
  end

  class ClientTimeout < RuntimeError # :nodoc:
  end
end

# FIXME: require lazily
require_relative 'yahns/log'
require_relative 'yahns/queue'
require_relative 'yahns/stream_input'
require_relative 'yahns/tee_input'
require_relative 'yahns/queue_egg'
require_relative 'yahns/http_response'
require_relative 'yahns/http_client'
require_relative 'yahns/http_context'
require_relative 'yahns/queue'
require_relative 'yahns/config'
require_relative 'yahns/tmpio'
require_relative 'yahns/worker'
require_relative 'yahns/sigevent'
require_relative 'yahns/socket_helper'
require_relative 'yahns/server'
require_relative 'yahns/fdmap'
require_relative 'yahns/acceptor'
require_relative 'yahns/wbuf'
require_relative 'yahns/version'

git clone git://yhbt.net/yahns.git
git clone https://yhbt.net/yahns.git