unicorn 4.8.3 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +5 -5
  2. data/.document +0 -1
  3. data/.gitattributes +5 -0
  4. data/.gitignore +2 -2
  5. data/.manifest +15 -19
  6. data/.olddoc.yml +25 -0
  7. data/Application_Timeouts +7 -7
  8. data/CONTRIBUTORS +6 -2
  9. data/DESIGN +2 -4
  10. data/Documentation/.gitignore +1 -3
  11. data/Documentation/unicorn.1 +222 -0
  12. data/Documentation/unicorn_rails.1 +207 -0
  13. data/FAQ +23 -6
  14. data/GIT-VERSION-FILE +1 -1
  15. data/GIT-VERSION-GEN +1 -1
  16. data/GNUmakefile +138 -92
  17. data/HACKING +5 -30
  18. data/ISSUES +73 -36
  19. data/KNOWN_ISSUES +18 -18
  20. data/LATEST +16 -22
  21. data/LICENSE +2 -2
  22. data/Links +24 -22
  23. data/NEWS +771 -0
  24. data/PHILOSOPHY +0 -6
  25. data/README +48 -42
  26. data/Rakefile +0 -44
  27. data/SIGNALS +2 -2
  28. data/Sandbox +11 -10
  29. data/TODO +0 -2
  30. data/TUNING +30 -9
  31. data/archive/slrnpull.conf +1 -1
  32. data/bin/unicorn +4 -2
  33. data/bin/unicorn_rails +3 -3
  34. data/examples/big_app_gc.rb +1 -1
  35. data/examples/init.sh +36 -8
  36. data/examples/logrotate.conf +17 -2
  37. data/examples/nginx.conf +14 -14
  38. data/examples/unicorn.conf.minimal.rb +2 -2
  39. data/examples/unicorn.conf.rb +14 -6
  40. data/examples/unicorn.socket +11 -0
  41. data/examples/unicorn@.service +40 -0
  42. data/ext/unicorn_http/c_util.h +5 -13
  43. data/ext/unicorn_http/common_field_optimization.h +22 -5
  44. data/ext/unicorn_http/epollexclusive.h +124 -0
  45. data/ext/unicorn_http/ext_help.h +0 -44
  46. data/ext/unicorn_http/extconf.rb +32 -5
  47. data/ext/unicorn_http/global_variables.h +2 -2
  48. data/ext/unicorn_http/httpdate.c +3 -2
  49. data/ext/unicorn_http/unicorn_http.c +926 -638
  50. data/ext/unicorn_http/unicorn_http.rl +159 -170
  51. data/ext/unicorn_http/unicorn_http_common.rl +1 -1
  52. data/lib/unicorn/configurator.rb +110 -46
  53. data/lib/unicorn/const.rb +2 -25
  54. data/lib/unicorn/http_request.rb +110 -31
  55. data/lib/unicorn/http_response.rb +17 -31
  56. data/lib/unicorn/http_server.rb +259 -179
  57. data/lib/unicorn/launcher.rb +1 -1
  58. data/lib/unicorn/oob_gc.rb +6 -6
  59. data/lib/unicorn/select_waiter.rb +6 -0
  60. data/lib/unicorn/socket_helper.rb +58 -78
  61. data/lib/unicorn/stream_input.rb +8 -7
  62. data/lib/unicorn/tee_input.rb +16 -11
  63. data/lib/unicorn/tmpio.rb +10 -6
  64. data/lib/unicorn/util.rb +5 -4
  65. data/lib/unicorn/version.rb +1 -1
  66. data/lib/unicorn/worker.rb +36 -23
  67. data/lib/unicorn.rb +64 -44
  68. data/man/man1/unicorn.1 +124 -112
  69. data/man/man1/unicorn_rails.1 +106 -107
  70. data/t/GNUmakefile +3 -76
  71. data/t/README +4 -4
  72. data/t/t0002-parser-error.sh +3 -3
  73. data/t/t0011-active-unix-socket.sh +1 -1
  74. data/t/t0012-reload-empty-config.sh +2 -1
  75. data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  76. data/t/t0301.ru +13 -0
  77. data/t/test-lib.sh +4 -3
  78. data/test/benchmark/README +14 -4
  79. data/test/benchmark/ddstream.ru +50 -0
  80. data/test/benchmark/readinput.ru +40 -0
  81. data/test/benchmark/uconnect.perl +66 -0
  82. data/test/exec/test_exec.rb +74 -20
  83. data/test/test_helper.rb +42 -33
  84. data/test/unit/test_ccc.rb +91 -0
  85. data/test/unit/test_droplet.rb +1 -1
  86. data/test/unit/test_http_parser.rb +49 -19
  87. data/test/unit/test_http_parser_ng.rb +98 -115
  88. data/test/unit/test_request.rb +11 -11
  89. data/test/unit/test_response.rb +31 -19
  90. data/test/unit/test_server.rb +89 -15
  91. data/test/unit/test_signals.rb +9 -9
  92. data/test/unit/test_socket_helper.rb +16 -12
  93. data/test/unit/test_tee_input.rb +10 -0
  94. data/test/unit/test_upload.rb +10 -15
  95. data/test/unit/test_util.rb +32 -6
  96. data/test/unit/test_waiter.rb +34 -0
  97. data/unicorn.gemspec +28 -23
  98. data/unicorn_1 +1 -0
  99. data/unicorn_rails_1 +1 -0
  100. metadata +37 -58
  101. data/.wrongdoc.yml +0 -11
  102. data/ChangeLog +0 -5027
  103. data/Documentation/GNUmakefile +0 -30
  104. data/Documentation/unicorn.1.txt +0 -178
  105. data/Documentation/unicorn_rails.1.txt +0 -175
  106. data/examples/git.ru +0 -13
  107. data/lib/unicorn/app/exec_cgi.rb +0 -154
  108. data/lib/unicorn/app/inetd.rb +0 -109
  109. data/lib/unicorn/ssl_client.rb +0 -11
  110. data/lib/unicorn/ssl_configurator.rb +0 -104
  111. data/lib/unicorn/ssl_server.rb +0 -42
  112. data/local.mk.sample +0 -59
  113. data/script/isolate_for_tests +0 -31
  114. data/t/hijack.ru +0 -42
  115. data/t/t0016-trust-x-forwarded-false.sh +0 -30
  116. data/t/t0017-trust-x-forwarded-true.sh +0 -30
  117. data/t/t0200-rack-hijack.sh +0 -27
  118. data/test/unit/test_http_parser_xftrust.rb +0 -38
  119. data/test/unit/test_sni_hostnames.rb +0 -47
data/ISSUES CHANGED
@@ -1,23 +1,74 @@
1
1
  = Issues
2
2
 
3
- mailto:unicorn-public@bogomips.org is the best place to report bugs,
3
+ mailto:unicorn-public@yhbt.net is the best place to report bugs,
4
4
  submit patches and/or obtain support after you have searched the
5
- {email archives}[http://bogomips.org/unicorn-public/] and
6
- {documentation}[http://unicorn.bogomips.org/].
5
+ {email archives}[https://yhbt.net/unicorn-public/] and
6
+ {documentation}[https://yhbt.net/unicorn/].
7
7
 
8
- * No subscription will ever be required to email the public inbox.
9
- * Please Cc: all participants in a thread, as there are no subscribers
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
11
  * Quote as little as possible of the message you're replying to
12
- * Do not send HTML mail, it will likely be flagged as spam
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
- then feel free to email us privately at mailto:unicorn@bogomips.org
16
- instead and your issue will be handled discreetly.
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
@@ -26,35 +77,21 @@ document distributed with git) on guidelines for patch submission.
26
77
 
27
78
  == Contact Info
28
79
 
29
- * public: mailto:unicorn-public@bogomips.org
30
- * private: mailto:unicorn@bogomips.org
31
-
32
- We operate a {public-inbox}[http://public-inbox.org/].
33
- You may subscribe using {ssoma}[http://ssoma.public-inbox.org/]:
34
-
35
- URL=git://bogomips.org/unicorn-public
36
- LISTNAME=unicorn
37
-
38
- # to initialize a maildir (this may be a new or existing maildir,
39
- # ssoma will not touch existing messages)
40
- # If you prefer mbox, use mbox:/path/to/mbox as the last argument
41
- # You may also use imap://$MAILSERVER/INBOX for an IMAP account
42
- # or imaps:// for an IMAPS account, as well.
43
- ssoma add $LISTNAME $URL maildir:/path/to/maildir
44
-
45
- # read with your favorite MUA (only using mutt as an example)
46
- mutt -f /path/to/maildir # (or /path/to/mbox)
47
-
48
- # to keep your mbox or maildir up-to-date, periodically run the following:
49
- ssoma sync $LISTNAME
80
+ Mail is publicly-archived, SMTP subscription is discouraged to avoid
81
+ servers being a single-point-of-failure, so Cc: all participants.
50
82
 
51
- # your MUA may modify and delete messages from the maildir or mbox,
52
- # this does not affect ssoma functionality at all
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.
53
85
 
54
- # to sync all your ssoma subscriptions
55
- ssoma sync
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
56
92
 
57
- # You may wish to sync in your cronjob
58
- ssoma sync --cron
93
+ Full Atom feeds:
94
+ * https://yhbt.net/unicorn-public/new.atom
95
+ * http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/new.atom
59
96
 
60
- HTML archives are available here: http://bogomips.org/unicorn-public/
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
- http://mid.gmane.org/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com
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 \Unicorn 3.6.1, we
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://redmine.ruby-lang.org/issues/show/2962 for more details
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 Unicorn depends on. Upgrading to Rails 2.3.4 (or later) is
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 Unicorn gemspec and remove the Rack dependency.
61
+ you may edit your unicorn gemspec and remove the Rack dependency.
62
62
 
63
- ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
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 Unicorn is itself the application launcher, the
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 Unicorn worker was about to exit.
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,30 +1,24 @@
1
- === unicorn 4.8.3 - the end of an era / 2014-05-07 07:50 UTC
1
+ === unicorn 6.0.0 - no more recycling Rack env / 2021-03-17 06:38 UTC
2
2
 
3
- This release updates documentation to reflect the migration of the
4
- mailing list to a new public-inbox[1] instance. This is necessary
5
- due to the impending RubyForge shutdown on May 15, 2014.
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:
6
8
 
7
- The public-inbox address is: unicorn-public@bogomips.org
8
- (no subscription required, plain text only)
9
- ssoma[2] git archives: git://bogomips.org/unicorn-public
10
- browser-friendly archives: http://bogomips.org/unicorn-public/
9
+ https://yhbt.net/unicorn-public/66A68DD8-83EF-4C7A-80E8-3F1F7AB31670@github.com/
11
10
 
12
- Using, getting help for, and contributing to unicorn will never
13
- require any of the following:
11
+ The major version is bumped since:
14
12
 
15
- 1) non-Free software (including SaaS)
16
- 2) registration or sign-in of any kind
17
- 3) a real identity (we accept mail from Mixmaster)
18
- 4) a graphical user interface
13
+ 1) there are performance regressions for some simple Rack apps
19
14
 
20
- Nowadays, plain-text email is the only ubiquitous platform which
21
- meets all our requirements for communication.
15
+ 2) unsupported 3rd-party monkey patches which previously
16
+ relied on this behavior may be broken (our version of
17
+ OobGC was).
22
18
 
23
- There is also one small bugfix to handle premature grandparent death
24
- upon initial startup. Most users are unaffected.
19
+ The test suite is also more reliable on multi-core systems
20
+ and Ruby 3.x.
25
21
 
26
- [1] policy: http://public-inbox.org/ - git://80x24.org/public-inbox
27
- an "archives first" approach to mailing lists
28
- [2] mechanism: http://ssoma.public-inbox.org/ - git://80x24.org/ssoma
29
- some sort of mail archiver (using git)
22
+ [1] thread from 2017 around rack.hijack safety:
23
+ https://yhbt.net/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/
30
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 - http://www.gnu.org/licenses/gpl-2.0.txt
12
- GPLv3 - http://www.gnu.org/licenses/gpl-3.0.txt
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 \Unicorn, you may be interested in some of the projects
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:unicorn-public@bogomips.org!
5
+ mailto:unicorn-public@yhbt.net!
6
6
 
7
7
  == Disclaimer
8
8
 
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:
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}[http://www.gnu.org/philosophy/free-sw.html]
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 \Unicorn
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 \Unicorn instances/applications on a single server
24
+ manage multiple unicorn instances/applications on a single server
25
25
 
26
- * {raindrops}[http://raindrops.bogomips.org/] - real-time stats for
26
+ * {raindrops}[https://yhbt.net/raindrops/] - real-time stats for
27
27
  preforking Rack servers
28
28
 
29
- * {UnXF}[http://bogomips.org/unxf/] Un-X-Forward* the Rack environment,
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
- === \Unicorn is written to work with
32
+ === unicorn is written to work with
33
33
 
34
- * {Rack}[http://rack.github.io/] - a minimal interface between webservers
34
+ * {Rack}[https://rack.github.io/] - a minimal interface between webservers
35
35
  supporting Ruby and Ruby frameworks
36
36
 
37
- * {Ruby}[http://www.ruby-lang.org/] - the programming language of Rack and \Unicorn
37
+ * {Ruby}[https://www.ruby-lang.org/en/] - the programming language of
38
+ Rack and unicorn
38
39
 
39
- * {nginx}[http://nginx.org/] - the reverse proxy for use with \Unicorn
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}[http://gunicorn.org/] - a Python version of \Unicorn
45
+ * {Green Unicorn}[https://gunicorn.org/] - a Python version of unicorn
46
46
 
47
- * {Rainbows!}[http://rainbows.bogomips.org/] - \Unicorn for sleepy
48
- apps and slow clients.
47
+ * {Starman}[https://metacpan.org/release/Starman/] - Plack/PSGI version
48
+ of unicorn
49
49
 
50
50
  === Prior Work
51
51
 
52
- * {Mongrel}[http://rubygems.org/gems/mongrel] - the awesome webserver
53
- unicorn is 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}[http://bogomips.org/david.git] - a tool to explain why you need
56
- nginx in front of \Unicorn
57
+ * {david}[https://yhbt.net/david.git] - a tool to explain why you need
58
+ nginx in front of unicorn