unicorn 5.3.1 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.manifest +10 -5
  3. data/.olddoc.yml +15 -7
  4. data/Application_Timeouts +4 -4
  5. data/CONTRIBUTORS +6 -2
  6. data/Documentation/.gitignore +1 -3
  7. data/Documentation/unicorn.1 +222 -0
  8. data/Documentation/unicorn_rails.1 +207 -0
  9. data/FAQ +1 -1
  10. data/GIT-VERSION-FILE +1 -1
  11. data/GIT-VERSION-GEN +1 -1
  12. data/GNUmakefile +117 -57
  13. data/HACKING +2 -9
  14. data/ISSUES +33 -32
  15. data/KNOWN_ISSUES +2 -2
  16. data/LATEST +16 -95
  17. data/LICENSE +2 -2
  18. data/Links +13 -11
  19. data/NEWS +239 -0
  20. data/README +27 -14
  21. data/SIGNALS +1 -1
  22. data/Sandbox +5 -5
  23. data/archive/slrnpull.conf +1 -1
  24. data/bin/unicorn +3 -1
  25. data/bin/unicorn_rails +2 -2
  26. data/examples/big_app_gc.rb +1 -1
  27. data/examples/logrotate.conf +3 -3
  28. data/examples/nginx.conf +4 -3
  29. data/examples/unicorn.conf.minimal.rb +2 -2
  30. data/examples/unicorn.conf.rb +2 -2
  31. data/examples/unicorn@.service +7 -0
  32. data/ext/unicorn_http/c_util.h +5 -13
  33. data/ext/unicorn_http/common_field_optimization.h +23 -6
  34. data/ext/unicorn_http/epollexclusive.h +124 -0
  35. data/ext/unicorn_http/ext_help.h +0 -24
  36. data/ext/unicorn_http/extconf.rb +32 -6
  37. data/ext/unicorn_http/global_variables.h +3 -3
  38. data/ext/unicorn_http/httpdate.c +3 -2
  39. data/ext/unicorn_http/unicorn_http.c +277 -237
  40. data/ext/unicorn_http/unicorn_http.rl +67 -27
  41. data/lib/unicorn/configurator.rb +26 -5
  42. data/lib/unicorn/http_request.rb +13 -3
  43. data/lib/unicorn/http_response.rb +3 -2
  44. data/lib/unicorn/http_server.rb +76 -51
  45. data/lib/unicorn/launcher.rb +1 -1
  46. data/lib/unicorn/oob_gc.rb +5 -5
  47. data/lib/unicorn/select_waiter.rb +6 -0
  48. data/lib/unicorn/socket_helper.rb +4 -3
  49. data/lib/unicorn/tmpio.rb +8 -2
  50. data/lib/unicorn/util.rb +3 -3
  51. data/lib/unicorn/version.rb +1 -1
  52. data/lib/unicorn/worker.rb +16 -2
  53. data/lib/unicorn.rb +25 -10
  54. data/man/man1/unicorn.1 +88 -85
  55. data/man/man1/unicorn_rails.1 +79 -81
  56. data/t/GNUmakefile +3 -72
  57. data/t/README +4 -4
  58. data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  59. data/t/t0301.ru +13 -0
  60. data/t/test-lib.sh +2 -1
  61. data/test/benchmark/README +14 -4
  62. data/test/benchmark/ddstream.ru +50 -0
  63. data/test/benchmark/readinput.ru +40 -0
  64. data/test/benchmark/uconnect.perl +66 -0
  65. data/test/exec/test_exec.rb +20 -19
  66. data/test/test_helper.rb +38 -30
  67. data/test/unit/test_ccc.rb +5 -4
  68. data/test/unit/test_droplet.rb +1 -1
  69. data/test/unit/test_http_parser.rb +16 -0
  70. data/test/unit/test_http_parser_ng.rb +81 -0
  71. data/test/unit/test_request.rb +10 -10
  72. data/test/unit/test_server.rb +86 -12
  73. data/test/unit/test_signals.rb +8 -8
  74. data/test/unit/test_socket_helper.rb +5 -5
  75. data/test/unit/test_upload.rb +9 -14
  76. data/test/unit/test_util.rb +29 -3
  77. data/test/unit/test_waiter.rb +34 -0
  78. data/unicorn.gemspec +8 -7
  79. metadata +19 -13
  80. data/Documentation/GNUmakefile +0 -30
  81. data/Documentation/unicorn.1.txt +0 -187
  82. data/Documentation/unicorn_rails.1.txt +0 -175
  83. data/t/hijack.ru +0 -43
  84. data/t/t0200-rack-hijack.sh +0 -30
data/lib/unicorn/tmpio.rb CHANGED
@@ -11,12 +11,18 @@ class Unicorn::TmpIO < File
11
11
  # immediately, switched to binary mode, and userspace output
12
12
  # buffering is disabled
13
13
  def self.new
14
+ path = nil
15
+
16
+ # workaround File#path being tainted:
17
+ # https://bugs.ruby-lang.org/issues/14485
14
18
  fp = begin
15
- super("#{Dir::tmpdir}/#{rand}", RDWR|CREAT|EXCL, 0600)
19
+ path = "#{Dir::tmpdir}/#{rand}"
20
+ super(path, RDWR|CREAT|EXCL, 0600)
16
21
  rescue Errno::EEXIST
17
22
  retry
18
23
  end
19
- unlink(fp.path)
24
+
25
+ unlink(path)
20
26
  fp.binmode
21
27
  fp.sync = true
22
28
  fp
data/lib/unicorn/util.rb CHANGED
@@ -11,8 +11,8 @@ module Unicorn::Util # :nodoc:
11
11
  fp.stat.file? &&
12
12
  fp.sync &&
13
13
  (fp.fcntl(Fcntl::F_GETFL) & append_flags) == append_flags
14
- rescue IOError, Errno::EBADF
15
- false
14
+ rescue IOError, Errno::EBADF
15
+ false
16
16
  end
17
17
 
18
18
  def self.chown_logs(uid, gid)
@@ -64,7 +64,7 @@ module Unicorn::Util # :nodoc:
64
64
  fp.reopen(fp.path, "a")
65
65
  else
66
66
  # We should not need this workaround, Ruby can be fixed:
67
- # http://bugs.ruby-lang.org/issues/9036
67
+ # https://bugs.ruby-lang.org/issues/9036
68
68
  # MRI will not call call fclose(3) or freopen(3) here
69
69
  # since there's no associated std{in,out,err} FILE * pointer
70
70
  # This should atomically use dup3(2) (or dup2(2)) syscall
@@ -1 +1 @@
1
- Unicorn::Const::UNICORN_VERSION = '5.3.1'
1
+ Unicorn::Const::UNICORN_VERSION = '6.1.0'
@@ -122,6 +122,11 @@ class Unicorn::Worker
122
122
  # the +after_fork+ hook after any privileged functions need to be
123
123
  # run (e.g. to set per-worker CPU affinity, niceness, etc)
124
124
  #
125
+ # +group+ can be specified as a string, or as an array of two
126
+ # strings. If an array of two strings is given, the first string
127
+ # is used as the primary group of the process, and the second is
128
+ # used as the group of the log files.
129
+ #
125
130
  # Any and all errors raised within this method will be propagated
126
131
  # directly back to the caller (usually the +after_fork+ hook.
127
132
  # These errors commonly include ArgumentError for specifying an
@@ -134,8 +139,17 @@ class Unicorn::Worker
134
139
  # insufficient because modern systems have fine-grained
135
140
  # capabilities. Let the caller handle any and all errors.
136
141
  uid = Etc.getpwnam(user).uid
137
- gid = Etc.getgrnam(group).gid if group
138
- Unicorn::Util.chown_logs(uid, gid)
142
+
143
+ if group
144
+ if group.is_a?(Array)
145
+ group, log_group = group
146
+ log_gid = Etc.getgrnam(log_group).gid
147
+ end
148
+ gid = Etc.getgrnam(group).gid
149
+ log_gid ||= gid
150
+ end
151
+
152
+ Unicorn::Util.chown_logs(uid, log_gid)
139
153
  if gid && Process.egid != gid
140
154
  Process.initgroups(user, gid)
141
155
  Process::GID.change_privilege(gid)
data/lib/unicorn.rb CHANGED
@@ -2,6 +2,8 @@
2
2
  require 'etc'
3
3
  require 'stringio'
4
4
  require 'kgio'
5
+ require 'raindrops'
6
+ require 'io/wait'
5
7
 
6
8
  begin
7
9
  require 'rack'
@@ -43,12 +45,8 @@ module Unicorn
43
45
  abort "rack and Rack::Builder must be available for processing #{ru}"
44
46
  end
45
47
 
46
- # Op is going to get cleared before the returned lambda is called, so
47
- # save this value so that it's still there when we need it:
48
- no_default_middleware = op[:no_default_middleware]
49
-
50
48
  # always called after config file parsing, may be called after forking
51
- lambda do ||
49
+ lambda do |_, server|
52
50
  inner_app = case ru
53
51
  when /\.ru$/
54
52
  raw = File.read(ru)
@@ -59,9 +57,12 @@ module Unicorn
59
57
  Object.const_get(File.basename(ru, '.rb').capitalize)
60
58
  end
61
59
 
62
- pp({ :inner_app => inner_app }) if $DEBUG
60
+ if $DEBUG
61
+ require 'pp'
62
+ pp({ :inner_app => inner_app })
63
+ end
63
64
 
64
- return inner_app if no_default_middleware
65
+ return inner_app unless server.default_middleware
65
66
 
66
67
  middleware = { # order matters
67
68
  ContentLength: nil,
@@ -95,7 +96,7 @@ module Unicorn
95
96
 
96
97
  # returns an array of strings representing TCP listen socket addresses
97
98
  # and Unix domain socket paths. This is useful for use with
98
- # Raindrops::Middleware under Linux: https://bogomips.org/raindrops/
99
+ # Raindrops::Middleware under Linux: https://yhbt.net/raindrops/
99
100
  def self.listener_names
100
101
  Unicorn::HttpServer::LISTENERS.map do |io|
101
102
  Unicorn::SocketHelper.sock_name(io)
@@ -109,9 +110,23 @@ module Unicorn
109
110
  exc.backtrace.each { |line| logger.error(line) }
110
111
  end
111
112
 
112
- # remove this when we only support Ruby >= 2.0
113
+ F_SETPIPE_SZ = 1031 if RUBY_PLATFORM =~ /linux/
114
+
113
115
  def self.pipe # :nodoc:
114
- Kgio::Pipe.new.each { |io| io.close_on_exec = true }
116
+ Kgio::Pipe.new.each do |io|
117
+ # shrink pipes to minimize impact on /proc/sys/fs/pipe-user-pages-soft
118
+ # limits.
119
+ if defined?(F_SETPIPE_SZ)
120
+ begin
121
+ io.fcntl(F_SETPIPE_SZ, Raindrops::PAGE_SIZE)
122
+ rescue Errno::EINVAL
123
+ # old kernel
124
+ rescue Errno::EPERM
125
+ # resizes fail if Linux is close to the pipe limit for the user
126
+ # or if the user does not have permissions to resize
127
+ end
128
+ end
129
+ end
115
130
  end
116
131
  # :startdoc:
117
132
  end
data/man/man1/unicorn.1 CHANGED
@@ -1,4 +1,5 @@
1
1
  .TH "UNICORN" "1" "September 15, 2009" "Unicorn User Manual" ""
2
+ .hy
2
3
  .SH NAME
3
4
  .PP
4
5
  unicorn \- a rackup\-like command to launch the Unicorn HTTP server
@@ -8,74 +9,73 @@ unicorn [\-c CONFIG_FILE] [\-E RACK_ENV] [\-D] [RACKUP_FILE]
8
9
  .SH DESCRIPTION
9
10
  .PP
10
11
  A rackup(1)\-like command to launch Rack applications using Unicorn.
11
- It is expected to be started in your application root (APP_ROOT), but
12
- the "working_directory" directive may be used in the CONFIG_FILE.
12
+ It is expected to be started in your application root (APP_ROOT),
13
+ but the "working_directory" directive may be used in the CONFIG_FILE.
13
14
  .PP
14
- While unicorn takes a myriad of command\-line options for compatibility
15
- with ruby(1) and rackup(1), it is recommended to stick to the few
16
- command\-line options specified in the SYNOPSIS and use the CONFIG_FILE
17
- as much as possible.
15
+ While unicorn takes a myriad of command\-line options for
16
+ compatibility with ruby(1) and rackup(1), it is recommended to stick
17
+ to the few command\-line options specified in the SYNOPSIS and use
18
+ the CONFIG_FILE as much as possible.
18
19
  .SH RACKUP FILE
19
20
  .PP
20
- This defaults to "config.ru" in APP_ROOT.
21
- It should be the same file used by rackup(1) and other Rack launchers,
22
- it uses the \f[I]Rack::Builder\f[] DSL.
21
+ This defaults to "config.ru" in APP_ROOT. It should be the same
22
+ file used by rackup(1) and other Rack launchers, it uses the
23
+ \f[I]Rack::Builder\f[] DSL.
23
24
  .PP
24
- Embedded command\-line options are mostly parsed for compatibility with
25
- rackup(1) but strongly discouraged.
25
+ Embedded command\-line options are mostly parsed for compatibility
26
+ with rackup(1) but strongly discouraged.
26
27
  .SH UNICORN OPTIONS
27
28
  .TP
28
29
  .B \-c, \-\-config\-file CONFIG_FILE
29
- Path to the Unicorn\-specific config file.
30
- The config file is implemented as a Ruby DSL, so Ruby code may executed.
31
- See the RDoc/ri for the \f[I]Unicorn::Configurator\f[] class for the
32
- full list of directives available from the DSL.
33
- Using an absolute path for for CONFIG_FILE is recommended as it makes
34
- multiple instances of Unicorn easily distinguishable when viewing ps(1)
35
- output.
30
+ Path to the Unicorn\-specific config file. The config file is
31
+ implemented as a Ruby DSL, so Ruby code may executed.
32
+ See the RDoc/ri for the \f[I]Unicorn::Configurator\f[] class for the full
33
+ list of directives available from the DSL.
34
+ Using an absolute path for for CONFIG_FILE is recommended as it
35
+ makes multiple instances of Unicorn easily distinguishable when
36
+ viewing ps(1) output.
36
37
  .RS
37
38
  .RE
38
39
  .TP
39
40
  .B \-D, \-\-daemonize
40
- Run daemonized in the background.
41
- The process is detached from the controlling terminal and stdin is
42
- redirected to "/dev/null".
43
- Unlike many common UNIX daemons, we do not chdir to "/" upon
44
- daemonization to allow more control over the startup/upgrade process.
45
- Unless specified in the CONFIG_FILE, stderr and stdout will also be
46
- redirected to "/dev/null".
41
+ Run daemonized in the background. The process is detached from
42
+ the controlling terminal and stdin is redirected to "/dev/null".
43
+ Unlike many common UNIX daemons, we do not chdir to "/"
44
+ upon daemonization to allow more control over the startup/upgrade
45
+ process.
46
+ Unless specified in the CONFIG_FILE, stderr and stdout will
47
+ also be redirected to "/dev/null".
47
48
  .RS
48
49
  .RE
49
50
  .TP
50
51
  .B \-E, \-\-env RACK_ENV
51
- Run under the given RACK_ENV.
52
- See the RACK ENVIRONMENT section for more details.
52
+ Run under the given RACK_ENV. See the RACK ENVIRONMENT section
53
+ for more details.
53
54
  .RS
54
55
  .RE
55
56
  .TP
56
57
  .B \-l, \-\-listen ADDRESS
57
- Listens on a given ADDRESS.
58
- ADDRESS may be in the form of HOST:PORT or PATH, HOST:PORT is taken to
59
- mean a TCP socket and PATH is meant to be a path to a UNIX domain
60
- socket.
61
- Defaults to "0.0.0.0:8080" (all addresses on TCP port 8080) For
62
- production deployments, specifying the "listen" directive in CONFIG_FILE
63
- is recommended as it allows fine\-tuning of socket options.
58
+ Listens on a given ADDRESS. ADDRESS may be in the form of
59
+ HOST:PORT or PATH, HOST:PORT is taken to mean a TCP socket
60
+ and PATH is meant to be a path to a UNIX domain socket.
61
+ Defaults to "0.0.0.0:8080" (all addresses on TCP port 8080)
62
+ For production deployments, specifying the "listen" directive in
63
+ CONFIG_FILE is recommended as it allows fine\-tuning of socket
64
+ options.
64
65
  .RS
65
66
  .RE
66
67
  .TP
67
68
  .B \-N, \-\-no\-default\-middleware
68
- Disables loading middleware implied by RACK_ENV.
69
- This bypasses the configuration documented in the RACK ENVIRONMENT
70
- section, but still allows RACK_ENV to be used for
71
- application/framework\-specific purposes.
69
+ Disables loading middleware implied by RACK_ENV. This bypasses the
70
+ configuration documented in the RACK ENVIRONMENT section, but still
71
+ allows RACK_ENV to be used for application/framework\-specific purposes.
72
72
  .RS
73
73
  .RE
74
74
  .SH RACKUP COMPATIBILITY OPTIONS
75
75
  .TP
76
76
  .B \-o, \-\-host HOST
77
- Listen on a TCP socket belonging to HOST, default is "0.0.0.0" (all
78
- addresses).
77
+ Listen on a TCP socket belonging to HOST, default is
78
+ "0.0.0.0" (all addresses).
79
79
  If specified multiple times on the command\-line, only the
80
80
  last\-specified value takes effect.
81
81
  This option only exists for compatibility with the rackup(1) command,
@@ -85,8 +85,8 @@ use of "\-l"/"\-\-listen" switch is recommended instead.
85
85
  .TP
86
86
  .B \-p, \-\-port PORT
87
87
  Listen on the specified TCP PORT, default is 8080.
88
- If specified multiple times on the command\-line, only the
89
- last\-specified value takes effect.
88
+ If specified multiple times on the command\-line, only the last\-specified
89
+ value takes effect.
90
90
  This option only exists for compatibility with the rackup(1) command,
91
91
  use of "\-l"/"\-\-listen" switch is recommended instead.
92
92
  .RS
@@ -99,9 +99,8 @@ No\-op, this exists only for compatibility with rackup(1).
99
99
  .SH RUBY OPTIONS
100
100
  .TP
101
101
  .B \-e, \-\-eval LINE
102
- Evaluate a LINE of Ruby code.
103
- This evaluation happens immediately as the command\-line is being
104
- parsed.
102
+ Evaluate a LINE of Ruby code. This evaluation happens
103
+ immediately as the command\-line is being parsed.
105
104
  .RS
106
105
  .RE
107
106
  .TP
@@ -116,18 +115,17 @@ Turn on verbose warnings, the $VERBOSE variable is set to true.
116
115
  .RE
117
116
  .TP
118
117
  .B \-I, \-\-include PATH
119
- specify
120
- \f[I]L\f[]\f[I]O\f[]\f[I]A\f[]\f[I]D\f[]~\f[I]P\f[]~\f[I]A\f[]\f[I]T\f[]\f[I]H\f[].\f[I]P\f[]\f[I]A\f[]\f[I]T\f[]\f[I]H\f[]\f[I]w\f[]\f[I]i\f[]\f[I]l\f[]\f[I]l\f[]\f[I]b\f[]\f[I]e\f[]\f[I]p\f[]\f[I]r\f[]\f[I]e\f[]\f[I]p\f[]\f[I]e\f[]\f[I]n\f[]\f[I]d\f[]\f[I]e\f[]\f[I]d\f[]\f[I]t\f[]\f[I]o\f[]LOAD_PATH.
118
+ specify $LOAD_PATH. PATH will be prepended to $LOAD_PATH.
121
119
  The \[aq]:\[aq] character may be used to delimit multiple directories.
122
- This directive may be used more than once.
123
- Modifications to $LOAD_PATH take place immediately and in the order they
124
- were specified on the command\-line.
120
+ This directive may be used more than once. Modifications to
121
+ $LOAD_PATH take place immediately and in the order they were
122
+ specified on the command\-line.
125
123
  .RS
126
124
  .RE
127
125
  .TP
128
126
  .B \-r, \-\-require LIBRARY
129
- require a specified LIBRARY before executing the application.
130
- The "require" statement will be executed immediately and in the order
127
+ require a specified LIBRARY before executing the application. The
128
+ "require" statement will be executed immediately and in the order
131
129
  they were specified on the command\-line.
132
130
  .RS
133
131
  .RE
@@ -139,15 +137,15 @@ HUP \- reload config file, app, and gracefully restart all workers
139
137
  .IP \[bu] 2
140
138
  INT/TERM \- quick shutdown, kills all workers immediately
141
139
  .IP \[bu] 2
142
- QUIT \- graceful shutdown, waits for workers to finish their current
143
- request before finishing.
140
+ QUIT \- graceful shutdown, waits for workers to finish their
141
+ current request before finishing.
144
142
  .IP \[bu] 2
145
- USR1 \- reopen all logs owned by the master and all workers See
146
- Unicorn::Util.reopen_logs for what is considered a log.
143
+ USR1 \- reopen all logs owned by the master and all workers
144
+ See Unicorn::Util.reopen_logs for what is considered a log.
147
145
  .IP \[bu] 2
148
- USR2 \- reexecute the running binary.
149
- A separate QUIT should be sent to the original process once the child is
150
- verified to be up and running.
146
+ USR2 \- reexecute the running binary. A separate QUIT
147
+ should be sent to the original process once the child is verified to
148
+ be up and running.
151
149
  .IP \[bu] 2
152
150
  WINCH \- gracefully stops workers but keep the master running.
153
151
  This will only work for daemonized processes.
@@ -156,7 +154,7 @@ TTIN \- increment the number of worker processes by one
156
154
  .IP \[bu] 2
157
155
  TTOU \- decrement the number of worker processes by one
158
156
  .PP
159
- See the SIGNALS (https://bogomips.org/unicorn/SIGNALS.html) document for
157
+ See the SIGNALS (https://yhbt.net/unicorn/SIGNALS.html) document for
160
158
  full description of all signals used by Unicorn.
161
159
  .SH RACK ENVIRONMENT
162
160
  .PP
@@ -164,56 +162,61 @@ Accepted values of RACK_ENV and the middleware they automatically load
164
162
  (outside of RACKUP_FILE) are exactly as those in rackup(1):
165
163
  .IP \[bu] 2
166
164
  development \- loads Rack::CommonLogger, Rack::ShowExceptions, and
167
- Rack::Lint middleware
165
+ Rack::Lint middleware
168
166
  .IP \[bu] 2
169
167
  deployment \- loads Rack::CommonLogger middleware
170
168
  .IP \[bu] 2
171
169
  none \- loads no middleware at all, relying entirely on RACKUP_FILE
172
170
  .PP
173
- All unrecognized values for RACK_ENV are assumed to be "none".
174
- Production deployments are strongly encouraged to use "deployment" or
175
- "none" for maximum performance.
171
+ All unrecognized values for RACK_ENV are assumed to be
172
+ "none". Production deployments are strongly encouraged to use
173
+ "deployment" or "none" for maximum performance.
176
174
  .PP
177
- As of Unicorn 0.94.0, RACK_ENV is exported as a process\-wide
178
- environment variable as well.
179
- While not current a part of the Rack specification as of Rack 1.0.1,
180
- this has become a de facto standard in the Rack world.
175
+ As of Unicorn 0.94.0, RACK_ENV is exported as a process\-wide environment
176
+ variable as well. While not current a part of the Rack specification as
177
+ of Rack 1.0.1, this has become a de facto standard in the Rack world.
181
178
  .PP
182
179
  Note the Rack::ContentLength and Rack::Chunked middlewares are also
183
180
  loaded by "deployment" and "development", but no other values of
184
- RACK_ENV.
185
- If needed, they must be individually specified in the RACKUP_FILE, some
186
- frameworks do not require them.
181
+ RACK_ENV. If needed, they must be individually specified in the
182
+ RACKUP_FILE, some frameworks do not require them.
187
183
  .SH ENVIRONMENT VARIABLES
188
184
  .PP
189
185
  The RACK_ENV variable is set by the aforementioned \-E switch.
190
- All application or library\-specific environment variables (e.g.
191
- TMPDIR) may always be set in the Unicorn CONFIG_FILE in addition to the
192
- spawning shell.
193
- When transparently upgrading Unicorn, all environment variables set in
194
- the old master process are inherited by the new master process.
186
+ All application or library\-specific environment variables (e.g. TMPDIR)
187
+ may always be set in the Unicorn CONFIG_FILE in addition to the spawning
188
+ shell. When transparently upgrading Unicorn, all environment variables
189
+ set in the old master process are inherited by the new master process.
195
190
  Unicorn only uses (and will overwrite) the UNICORN_FD environment
196
191
  variable internally when doing transparent upgrades.
197
192
  .PP
198
193
  UNICORN_FD is a comma\-delimited list of one or more file descriptors
199
- used to implement USR2 upgrades.
200
- Init systems may bind listen sockets itself and spawn unicorn with
201
- UNICORN_FD set to the file descriptor numbers of the listen socket(s).
194
+ used to implement USR2 upgrades. Init systems may bind listen sockets
195
+ itself and spawn unicorn with UNICORN_FD set to the file descriptor
196
+ numbers of the listen socket(s).
202
197
  .PP
203
198
  As of unicorn 5.0, LISTEN_PID and LISTEN_FDS are used for socket
204
- activation as documented in the sd_listen_fds(3) manpage.
205
- Users relying on this feature do not need to specify a listen socket in
199
+ activation as documented in the sd_listen_fds(3) manpage. Users
200
+ relying on this feature do not need to specify a listen socket in
206
201
  the unicorn config file.
207
202
  .SH SEE ALSO
208
203
  .IP \[bu] 2
209
204
  \f[I]Rack::Builder\f[] ri/RDoc
210
205
  .IP \[bu] 2
211
206
  \f[I]Unicorn::Configurator\f[] ri/RDoc
207
+ .UR https://yhbt.net/unicorn/Unicorn/Configurator.html
208
+ .UE
212
209
  .IP \[bu] 2
213
- Unicorn RDoc (https://bogomips.org/unicorn/)
210
+ unicorn RDoc
211
+ .UR https://yhbt.net/unicorn/
212
+ .UE
214
213
  .IP \[bu] 2
215
- Rack RDoc (http://www.rubydoc.info/github/rack/rack/)
214
+ Rack RDoc
215
+ .UR https://www.rubydoc.info/github/rack/rack/
216
+ .UE
216
217
  .IP \[bu] 2
217
- Rackup HowTo (https://github.com/rack/rack/wiki/tutorial-rackup-howto)
218
+ Rackup HowTo
219
+ .UR https://github.com/rack/rack/wiki/(tutorial)-rackup-howto
220
+ .UE
218
221
  .SH AUTHORS
219
- The Unicorn Community <unicorn-public@bogomips.org>.
222
+ The Unicorn Community <unicorn-public@yhbt.net>.