unicorn 4.8.0 → 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.
- checksums.yaml +7 -0
- data/.document +0 -1
- data/.gitattributes +5 -0
- data/.gitignore +2 -2
- data/.manifest +17 -21
- data/.olddoc.yml +25 -0
- data/Application_Timeouts +7 -7
- data/CONTRIBUTORS +6 -2
- data/DESIGN +2 -4
- data/Documentation/.gitignore +1 -3
- data/Documentation/unicorn.1 +222 -0
- data/Documentation/unicorn_rails.1 +207 -0
- data/FAQ +23 -6
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +138 -92
- data/HACKING +10 -32
- data/ISSUES +80 -19
- data/KNOWN_ISSUES +18 -18
- data/LATEST +23 -27
- data/LICENSE +2 -2
- data/Links +24 -22
- data/NEWS +823 -0
- data/PHILOSOPHY +0 -6
- data/README +49 -48
- data/Rakefile +0 -44
- data/SIGNALS +2 -2
- data/Sandbox +11 -10
- data/TODO +0 -2
- data/TUNING +30 -9
- data/archive/.gitignore +3 -0
- data/archive/slrnpull.conf +4 -0
- data/bin/unicorn +4 -2
- data/bin/unicorn_rails +3 -3
- data/examples/big_app_gc.rb +1 -1
- data/examples/init.sh +36 -8
- data/examples/logrotate.conf +17 -2
- data/examples/nginx.conf +14 -14
- data/examples/unicorn.conf.minimal.rb +2 -2
- data/examples/unicorn.conf.rb +14 -6
- data/examples/unicorn.socket +11 -0
- data/examples/unicorn@.service +40 -0
- data/ext/unicorn_http/c_util.h +5 -13
- data/ext/unicorn_http/common_field_optimization.h +22 -5
- data/ext/unicorn_http/epollexclusive.h +124 -0
- data/ext/unicorn_http/ext_help.h +0 -44
- data/ext/unicorn_http/extconf.rb +32 -5
- data/ext/unicorn_http/global_variables.h +2 -2
- data/ext/unicorn_http/httpdate.c +3 -2
- data/ext/unicorn_http/unicorn_http.c +926 -638
- data/ext/unicorn_http/unicorn_http.rl +159 -170
- data/ext/unicorn_http/unicorn_http_common.rl +1 -1
- data/lib/unicorn/configurator.rb +110 -46
- data/lib/unicorn/const.rb +2 -25
- data/lib/unicorn/http_request.rb +110 -31
- data/lib/unicorn/http_response.rb +17 -31
- data/lib/unicorn/http_server.rb +272 -180
- data/lib/unicorn/launcher.rb +1 -1
- data/lib/unicorn/oob_gc.rb +16 -6
- data/lib/unicorn/select_waiter.rb +6 -0
- data/lib/unicorn/socket_helper.rb +58 -78
- data/lib/unicorn/stream_input.rb +8 -7
- data/lib/unicorn/tee_input.rb +16 -11
- data/lib/unicorn/tmpio.rb +10 -6
- data/lib/unicorn/util.rb +5 -4
- data/lib/unicorn/version.rb +1 -1
- data/lib/unicorn/worker.rb +36 -23
- data/lib/unicorn.rb +64 -44
- data/man/man1/unicorn.1 +124 -122
- data/man/man1/unicorn_rails.1 +113 -127
- data/t/.gitignore +0 -1
- data/t/GNUmakefile +3 -80
- data/t/README +4 -4
- data/t/t0002-parser-error.sh +3 -3
- data/t/t0011-active-unix-socket.sh +1 -1
- data/t/t0012-reload-empty-config.sh +2 -1
- data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
- data/t/t0301.ru +13 -0
- data/t/test-lib.sh +4 -3
- data/test/benchmark/README +14 -4
- data/test/benchmark/ddstream.ru +50 -0
- data/test/benchmark/readinput.ru +40 -0
- data/test/benchmark/uconnect.perl +66 -0
- data/test/exec/test_exec.rb +74 -20
- data/test/test_helper.rb +42 -33
- data/test/unit/test_ccc.rb +91 -0
- data/test/unit/test_droplet.rb +1 -1
- data/test/unit/test_http_parser.rb +49 -19
- data/test/unit/test_http_parser_ng.rb +98 -115
- data/test/unit/test_request.rb +11 -11
- data/test/unit/test_response.rb +31 -19
- data/test/unit/test_server.rb +89 -15
- data/test/unit/test_signals.rb +9 -9
- data/test/unit/test_socket_helper.rb +16 -12
- data/test/unit/test_tee_input.rb +10 -0
- data/test/unit/test_upload.rb +10 -15
- data/test/unit/test_util.rb +32 -6
- data/test/unit/test_waiter.rb +34 -0
- data/unicorn.gemspec +28 -23
- data/unicorn_1 +1 -0
- data/unicorn_rails_1 +1 -0
- metadata +68 -134
- data/.wrongdoc.yml +0 -10
- data/ChangeLog +0 -4861
- data/Documentation/GNUmakefile +0 -30
- data/Documentation/unicorn.1.txt +0 -178
- data/Documentation/unicorn_rails.1.txt +0 -175
- data/examples/git.ru +0 -13
- data/lib/unicorn/app/exec_cgi.rb +0 -154
- data/lib/unicorn/app/inetd.rb +0 -109
- data/lib/unicorn/ssl_client.rb +0 -11
- data/lib/unicorn/ssl_configurator.rb +0 -104
- data/lib/unicorn/ssl_server.rb +0 -42
- data/local.mk.sample +0 -59
- data/script/isolate_for_tests +0 -32
- data/t/hijack.ru +0 -42
- data/t/sslgen.sh +0 -71
- data/t/t0016-trust-x-forwarded-false.sh +0 -30
- data/t/t0017-trust-x-forwarded-true.sh +0 -30
- data/t/t0200-rack-hijack.sh +0 -27
- data/t/t0600-https-server-basic.sh +0 -48
- data/test/unit/test_http_parser_xftrust.rb +0 -38
- data/test/unit/test_sni_hostnames.rb +0 -47
data/ISSUES
CHANGED
|
@@ -1,36 +1,97 @@
|
|
|
1
1
|
= Issues
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
{documentation}[
|
|
3
|
+
mailto:unicorn-public@yhbt.net is the best place to report bugs,
|
|
4
|
+
submit patches and/or obtain support after you have searched the
|
|
5
|
+
{email archives}[https://yhbt.net/unicorn-public/] and
|
|
6
|
+
{documentation}[https://yhbt.net/unicorn/].
|
|
7
7
|
|
|
8
|
-
* No subscription
|
|
9
|
-
|
|
8
|
+
* No subscription will ever be required to email us
|
|
9
|
+
* Cc: all participants in a thread or commit, as subscription is optional
|
|
10
10
|
* Do not {top post}[http://catb.org/jargon/html/T/top-post.html] in replies
|
|
11
|
-
* Quote
|
|
12
|
-
* Do not send HTML mail
|
|
11
|
+
* Quote as little as possible of the message you're replying to
|
|
12
|
+
* Do not send HTML mail or images,
|
|
13
|
+
they hurt reader privacy and will be flagged as spam
|
|
14
|
+
* Anonymous and pseudonymous messages will ALWAYS be welcome
|
|
15
|
+
* The email submission port (587) is enabled on the yhbt.net MX:
|
|
16
|
+
https://yhbt.net/unicorn-public/20141004232241.GA23908@dcvr.yhbt.net/t/
|
|
17
|
+
|
|
18
|
+
We will never have a centralized or formal bug tracker. Instead we
|
|
19
|
+
can interoperate with any bug tracker which can Cc: us plain-text to
|
|
20
|
+
mailto:unicorn-public@yhbt.net This includes the Debian BTS
|
|
21
|
+
at https://bugs.debian.org/unicorn and possibly others.
|
|
22
|
+
|
|
23
|
+
unicorn is a server; it does not depend on graphics/audio. Nobody
|
|
24
|
+
communicating with us will ever be expected to go through the trouble
|
|
25
|
+
of setting up graphics nor audio support.
|
|
13
26
|
|
|
14
27
|
If your issue is of a sensitive nature or you're just shy in public,
|
|
15
|
-
|
|
16
|
-
|
|
28
|
+
use anonymity tools such as Tor or Mixmaster; and rely on the public
|
|
29
|
+
mail archives for responses. Be sure to scrub sensitive log messages
|
|
30
|
+
and such.
|
|
17
31
|
|
|
18
32
|
If you don't get a response within a few days, we may have forgotten
|
|
19
33
|
about it so feel free to ask again.
|
|
20
34
|
|
|
35
|
+
== Bugs in related projects
|
|
36
|
+
|
|
37
|
+
unicorn is sometimes affected by bugs in its dependencies. Bugs
|
|
38
|
+
triggered by unicorn in mainline Ruby, rack, GNU C library (glibc),
|
|
39
|
+
or the Linux kernel will be reported upstream and fixed.
|
|
40
|
+
|
|
41
|
+
For bugs in Ruby itself, we may forward bugs to
|
|
42
|
+
https://bugs.ruby-lang.org/ and discuss+fix them on the ruby-core
|
|
43
|
+
list at mailto:ruby-core@ruby-lang.org
|
|
44
|
+
Subscription to post is required to ruby-core, unfortunately:
|
|
45
|
+
mailto:ruby-core-request@ruby-lang.org?subject=subscribe
|
|
46
|
+
Unofficial archives are available at: https://public-inbox.org/ruby-core/
|
|
47
|
+
|
|
48
|
+
For uncommon bugs in Rack, we may forward bugs to
|
|
49
|
+
mailto:rack-devel@googlegroups.com and discuss there.
|
|
50
|
+
Subscription (without any web UI or Google account) is possible via:
|
|
51
|
+
mailto:rack-devel+subscribe@googlegroups.com
|
|
52
|
+
Note: not everyone can use the proprietary bug tracker used by Rack,
|
|
53
|
+
but their mailing list remains operational.
|
|
54
|
+
Unofficial archives are available at: https://public-inbox.org/rack-devel/
|
|
55
|
+
|
|
56
|
+
Uncommon bugs we encounter in the Linux kernel should be Cc:-ed to the
|
|
57
|
+
Linux kernel mailing list (LKML) at mailto:linux-kernel@vger.kernel.org
|
|
58
|
+
and subsystem maintainers such as mailto:netdev@vger.kernel.org
|
|
59
|
+
(for networking issues). It is expected practice to Cc: anybody
|
|
60
|
+
involved with any problematic commits (including those in the
|
|
61
|
+
Signed-off-by: and other trailer lines). No subscription is necessary,
|
|
62
|
+
and the our mailing list follows the same conventions as LKML for
|
|
63
|
+
interopability. Archives are available at https://lore.kernel.org/lkml/
|
|
64
|
+
There is a kernel.org Bugzilla instance, but it is ignored by most.
|
|
65
|
+
|
|
66
|
+
Likewise for any rare glibc bugs we might encounter, we should Cc:
|
|
67
|
+
mailto:libc-alpha@sourceware.org
|
|
68
|
+
Unofficial archives are available at: https://public-inbox.org/libc-alpha/
|
|
69
|
+
Keep in mind glibc upstream does use Bugzilla for tracking bugs:
|
|
70
|
+
https://sourceware.org/bugzilla/
|
|
71
|
+
|
|
21
72
|
== Submitting Patches
|
|
22
73
|
|
|
23
74
|
See the HACKING document (and additionally, the
|
|
24
|
-
Documentation/SubmittingPatches
|
|
25
|
-
guidelines for patch submission.
|
|
75
|
+
{SubmittingPatches}[https://git.kernel.org/cgit/git/git.git/tree/Documentation/SubmittingPatches]
|
|
76
|
+
document distributed with git) on guidelines for patch submission.
|
|
77
|
+
|
|
78
|
+
== Contact Info
|
|
79
|
+
|
|
80
|
+
Mail is publicly-archived, SMTP subscription is discouraged to avoid
|
|
81
|
+
servers being a single-point-of-failure, so Cc: all participants.
|
|
26
82
|
|
|
27
|
-
|
|
83
|
+
The HTTP(S) archives have links to per-thread Atom feeds and downloadable
|
|
84
|
+
mboxes. Read-only IMAP(S) folders and NNTP(S) newsgroups are also available.
|
|
28
85
|
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
86
|
+
* https://yhbt.net/unicorn-public/
|
|
87
|
+
* http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/
|
|
88
|
+
* imaps://yhbt.net/inbox.comp.lang.ruby.unicorn.0
|
|
89
|
+
* imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.unicorn.0
|
|
90
|
+
* nntps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
|
|
91
|
+
* nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general
|
|
32
92
|
|
|
33
|
-
|
|
93
|
+
Full Atom feeds:
|
|
94
|
+
* https://yhbt.net/unicorn-public/new.atom
|
|
95
|
+
* http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/new.atom
|
|
34
96
|
|
|
35
|
-
|
|
36
|
-
* http://rubyforge.org/pipermail/mongrel-unicorn
|
|
97
|
+
We only accept plain-text mail: mailto:unicorn-public@yhbt.net
|
data/KNOWN_ISSUES
CHANGED
|
@@ -9,24 +9,14 @@ acceptable solution. Those issues are documented here.
|
|
|
9
9
|
handlers.
|
|
10
10
|
|
|
11
11
|
* Issues with FreeBSD jails can be worked around as documented by Tatsuya Ono:
|
|
12
|
-
|
|
12
|
+
https://yhbt.net/unicorn-public/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com/
|
|
13
13
|
|
|
14
14
|
* PRNGs (pseudo-random number generators) loaded before forking
|
|
15
15
|
(e.g. "preload_app true") may need to have their internal state
|
|
16
|
-
reset in the after_fork hook. Starting with
|
|
16
|
+
reset in the after_fork hook. Starting with unicorn 3.6.1, we
|
|
17
17
|
have builtin workarounds for Kernel#rand and OpenSSL::Random users,
|
|
18
18
|
but applications may use other PRNGs.
|
|
19
19
|
|
|
20
|
-
* Under some versions of Ruby 1.8, it is necessary to call +srand+ in an
|
|
21
|
-
after_fork hook to get correct random number generation. We have a builtin
|
|
22
|
-
workaround for this starting with \Unicorn 3.6.1
|
|
23
|
-
|
|
24
|
-
See http://redmine.ruby-lang.org/issues/show/4338
|
|
25
|
-
|
|
26
|
-
* On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken
|
|
27
|
-
stdio that causes failure for file uploads larger than 112K. Upgrade
|
|
28
|
-
your version of Ruby or continue using Unicorn 1.x/3.4.x.
|
|
29
|
-
|
|
30
20
|
* For notes on sandboxing tools such as Bundler or Isolate,
|
|
31
21
|
see the {Sandbox}[link:Sandbox.html] page.
|
|
32
22
|
|
|
@@ -44,23 +34,33 @@ acceptable solution. Those issues are documented here.
|
|
|
44
34
|
|
|
45
35
|
== Known Issues (Old)
|
|
46
36
|
|
|
37
|
+
* Under some versions of Ruby 1.8, it is necessary to call +srand+ in an
|
|
38
|
+
after_fork hook to get correct random number generation. We have a builtin
|
|
39
|
+
workaround for this starting with unicorn 3.6.1
|
|
40
|
+
|
|
41
|
+
See http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/36450
|
|
42
|
+
|
|
43
|
+
* On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken
|
|
44
|
+
stdio that causes failure for file uploads larger than 112K. Upgrade
|
|
45
|
+
your version of Ruby or continue using unicorn 1.x/3.4.x.
|
|
46
|
+
|
|
47
47
|
* Under Ruby 1.9.1, methods like Array#shuffle and Array#sample will
|
|
48
48
|
segfault if called after forking. Upgrade to Ruby 1.9.2 or call
|
|
49
49
|
"Kernel.rand" in your after_fork hook to reinitialize the random
|
|
50
50
|
number generator.
|
|
51
51
|
|
|
52
|
-
See http://
|
|
52
|
+
See http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/28655
|
|
53
53
|
|
|
54
54
|
* Rails 2.3.2 bundles its own version of Rack. This may cause subtle
|
|
55
55
|
bugs when simultaneously loaded with the system-wide Rack Rubygem
|
|
56
|
-
which
|
|
56
|
+
which unicorn depends on. Upgrading to Rails 2.3.4 (or later) is
|
|
57
57
|
strongly recommended for all Rails 2.3.x users for this (and security
|
|
58
58
|
reasons). Rails 2.2.x series (or before) did not bundle Rack and are
|
|
59
59
|
should be unnaffected. If there is any reason which forces your
|
|
60
60
|
application to use Rails 2.3.2 and you have no other choice, then
|
|
61
|
-
you may edit your
|
|
61
|
+
you may edit your unicorn gemspec and remove the Rack dependency.
|
|
62
62
|
|
|
63
|
-
ref:
|
|
63
|
+
ref: https://yhbt.net/unicorn-public/20091014221552.GA30624@dcvr.yhbt.net/
|
|
64
64
|
Note: the workaround described in the article above only made
|
|
65
65
|
the issue more subtle and we didn't notice them immediately.
|
|
66
66
|
|
|
@@ -71,9 +71,9 @@ acceptable solution. Those issues are documented here.
|
|
|
71
71
|
set :env, :production
|
|
72
72
|
set :run, false
|
|
73
73
|
Since this is no longer an issue with Sinatra 0.9.x apps, this will not be
|
|
74
|
-
fixed on our end. Since
|
|
74
|
+
fixed on our end. Since unicorn is itself the application launcher, the
|
|
75
75
|
at_exit handler used in old Sinatra always caused Mongrel to be launched
|
|
76
|
-
whenever a
|
|
76
|
+
whenever a unicorn worker was about to exit.
|
|
77
77
|
|
|
78
78
|
Also remember we're capable of replacing the running binary without dropping
|
|
79
79
|
any connections regardless of framework :)
|
data/LATEST
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
|
-
=== unicorn
|
|
2
|
-
|
|
3
|
-
This release
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Note: the unicorn mailing list will be moved/changed soon due to the
|
|
25
|
-
RubyForge shutdown. unicorn will always rely only on Free Software.
|
|
26
|
-
There will never be any sign-up requirements nor terms-of-service to
|
|
27
|
-
agree to when communicating with us.
|
|
1
|
+
=== unicorn 6.0.0 - no more recycling Rack env / 2021-03-17 06:38 UTC
|
|
2
|
+
|
|
3
|
+
This release allocates a new Rack `env' hash for every request.
|
|
4
|
+
This is done for safety with internally-(thread|event)-using Rack
|
|
5
|
+
apps which expect to use `env' after the normal Rack response is
|
|
6
|
+
complete, but without relying on rack.hijack[1]. Thanks to
|
|
7
|
+
Dirkjan Bussink <d.bussink@gmail.com> for the patch:
|
|
8
|
+
|
|
9
|
+
https://yhbt.net/unicorn-public/66A68DD8-83EF-4C7A-80E8-3F1F7AB31670@github.com/
|
|
10
|
+
|
|
11
|
+
The major version is bumped since:
|
|
12
|
+
|
|
13
|
+
1) there are performance regressions for some simple Rack apps
|
|
14
|
+
|
|
15
|
+
2) unsupported 3rd-party monkey patches which previously
|
|
16
|
+
relied on this behavior may be broken (our version of
|
|
17
|
+
OobGC was).
|
|
18
|
+
|
|
19
|
+
The test suite is also more reliable on multi-core systems
|
|
20
|
+
and Ruby 3.x.
|
|
21
|
+
|
|
22
|
+
[1] thread from 2017 around rack.hijack safety:
|
|
23
|
+
https://yhbt.net/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/
|
|
28
24
|
|
data/LICENSE
CHANGED
|
@@ -8,8 +8,8 @@ any later version. We currently prefer the GPLv3 or later for
|
|
|
8
8
|
derivative works, but the GPLv2 is fine.
|
|
9
9
|
|
|
10
10
|
The complete texts of the GPLv2 and GPLv3 are below:
|
|
11
|
-
GPLv2 -
|
|
12
|
-
GPLv3 -
|
|
11
|
+
GPLv2 - https://www.gnu.org/licenses/gpl-2.0.txt
|
|
12
|
+
GPLv3 - https://www.gnu.org/licenses/gpl-3.0.txt
|
|
13
13
|
|
|
14
14
|
You may (against our _preference_) also use the Ruby 1.8 license terms
|
|
15
15
|
which we inherited from the original Mongrel project when we forked it:
|
data/Links
CHANGED
|
@@ -1,56 +1,58 @@
|
|
|
1
1
|
= Related Projects
|
|
2
2
|
|
|
3
|
-
If you're interested in
|
|
3
|
+
If you're interested in unicorn, you may be interested in some of the projects
|
|
4
4
|
listed below. If you have any links to add/change/remove, please tell us at
|
|
5
|
-
mailto:
|
|
5
|
+
mailto:unicorn-public@yhbt.net!
|
|
6
6
|
|
|
7
7
|
== Disclaimer
|
|
8
8
|
|
|
9
|
-
The
|
|
10
|
-
Furthermore, the
|
|
9
|
+
The unicorn project is not responsible for the content in these links.
|
|
10
|
+
Furthermore, the unicorn project has never, does not and will never endorse:
|
|
11
11
|
|
|
12
12
|
* any for-profit entities or services
|
|
13
|
-
* any non-{Free Software}[
|
|
13
|
+
* any non-{Free Software}[https://www.gnu.org/philosophy/free-sw.html]
|
|
14
14
|
|
|
15
15
|
The existence of these links does not imply endorsement of any entities
|
|
16
16
|
or services behind them.
|
|
17
17
|
|
|
18
|
-
=== For use with
|
|
18
|
+
=== For use with unicorn
|
|
19
19
|
|
|
20
20
|
* {Bluepill}[https://github.com/arya/bluepill] -
|
|
21
21
|
a simple process monitoring tool written in Ruby
|
|
22
22
|
|
|
23
23
|
* {golden_brindle}[https://github.com/simonoff/golden_brindle] - tool to
|
|
24
|
-
manage multiple
|
|
24
|
+
manage multiple unicorn instances/applications on a single server
|
|
25
25
|
|
|
26
|
-
* {raindrops}[
|
|
26
|
+
* {raindrops}[https://yhbt.net/raindrops/] - real-time stats for
|
|
27
27
|
preforking Rack servers
|
|
28
28
|
|
|
29
|
-
* {UnXF}[
|
|
29
|
+
* {UnXF}[https://yhbt.net/unxf/] Un-X-Forward* the Rack environment,
|
|
30
30
|
useful since unicorn is designed to be deployed behind a reverse proxy.
|
|
31
31
|
|
|
32
|
-
===
|
|
32
|
+
=== unicorn is written to work with
|
|
33
33
|
|
|
34
|
-
* {Rack}[
|
|
34
|
+
* {Rack}[https://rack.github.io/] - a minimal interface between webservers
|
|
35
35
|
supporting Ruby and Ruby frameworks
|
|
36
36
|
|
|
37
|
-
* {Ruby}[
|
|
37
|
+
* {Ruby}[https://www.ruby-lang.org/en/] - the programming language of
|
|
38
|
+
Rack and unicorn
|
|
38
39
|
|
|
39
|
-
* {nginx}[
|
|
40
|
-
|
|
41
|
-
* {kgio}[http://bogomips.org/kgio/] - the I/O library written for \Unicorn
|
|
40
|
+
* {nginx}[https://nginx.org/] (Free versions) -
|
|
41
|
+
the reverse proxy for use with unicorn
|
|
42
42
|
|
|
43
43
|
=== Derivatives
|
|
44
44
|
|
|
45
|
-
* {Green Unicorn}[
|
|
45
|
+
* {Green Unicorn}[https://gunicorn.org/] - a Python version of unicorn
|
|
46
46
|
|
|
47
|
-
* {
|
|
48
|
-
|
|
47
|
+
* {Starman}[https://metacpan.org/release/Starman/] - Plack/PSGI version
|
|
48
|
+
of unicorn
|
|
49
49
|
|
|
50
50
|
=== Prior Work
|
|
51
51
|
|
|
52
|
-
* {Mongrel}[
|
|
53
|
-
based on
|
|
52
|
+
* {Mongrel}[https://rubygems.org/gems/mongrel] - the awesome webserver
|
|
53
|
+
unicorn is based on. A historical archive of the mongrel dev list
|
|
54
|
+
featuring early discussions of unicorn is available at:
|
|
55
|
+
https://yhbt.net/mongrel-devel/
|
|
54
56
|
|
|
55
|
-
* {david}[
|
|
56
|
-
nginx in front of
|
|
57
|
+
* {david}[https://yhbt.net/david.git] - a tool to explain why you need
|
|
58
|
+
nginx in front of unicorn
|