wendell-puma 2.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +55 -0
  3. data/DEPLOYMENT.md +92 -0
  4. data/Gemfile +17 -0
  5. data/History.txt +588 -0
  6. data/LICENSE +26 -0
  7. data/Manifest.txt +68 -0
  8. data/README.md +251 -0
  9. data/Rakefile +158 -0
  10. data/bin/puma +10 -0
  11. data/bin/puma-wild +31 -0
  12. data/bin/pumactl +12 -0
  13. data/docs/config.md +0 -0
  14. data/docs/nginx.md +80 -0
  15. data/docs/signals.md +43 -0
  16. data/ext/puma_http11/PumaHttp11Service.java +17 -0
  17. data/ext/puma_http11/ext_help.h +15 -0
  18. data/ext/puma_http11/extconf.rb +9 -0
  19. data/ext/puma_http11/http11_parser.c +1225 -0
  20. data/ext/puma_http11/http11_parser.h +64 -0
  21. data/ext/puma_http11/http11_parser.java.rl +161 -0
  22. data/ext/puma_http11/http11_parser.rl +146 -0
  23. data/ext/puma_http11/http11_parser_common.rl +54 -0
  24. data/ext/puma_http11/io_buffer.c +155 -0
  25. data/ext/puma_http11/mini_ssl.c +198 -0
  26. data/ext/puma_http11/org/jruby/puma/Http11.java +225 -0
  27. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +488 -0
  28. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +391 -0
  29. data/ext/puma_http11/puma_http11.c +491 -0
  30. data/lib/puma.rb +14 -0
  31. data/lib/puma/accept_nonblock.rb +23 -0
  32. data/lib/puma/app/status.rb +59 -0
  33. data/lib/puma/binder.rb +298 -0
  34. data/lib/puma/capistrano.rb +86 -0
  35. data/lib/puma/cli.rb +606 -0
  36. data/lib/puma/client.rb +289 -0
  37. data/lib/puma/cluster.rb +404 -0
  38. data/lib/puma/compat.rb +18 -0
  39. data/lib/puma/configuration.rb +377 -0
  40. data/lib/puma/const.rb +165 -0
  41. data/lib/puma/control_cli.rb +251 -0
  42. data/lib/puma/daemon_ext.rb +25 -0
  43. data/lib/puma/delegation.rb +11 -0
  44. data/lib/puma/detect.rb +4 -0
  45. data/lib/puma/events.rb +130 -0
  46. data/lib/puma/io_buffer.rb +7 -0
  47. data/lib/puma/java_io_buffer.rb +45 -0
  48. data/lib/puma/jruby_restart.rb +83 -0
  49. data/lib/puma/minissl.rb +187 -0
  50. data/lib/puma/null_io.rb +34 -0
  51. data/lib/puma/rack_default.rb +7 -0
  52. data/lib/puma/rack_patch.rb +45 -0
  53. data/lib/puma/reactor.rb +183 -0
  54. data/lib/puma/runner.rb +146 -0
  55. data/lib/puma/server.rb +801 -0
  56. data/lib/puma/single.rb +102 -0
  57. data/lib/puma/tcp_logger.rb +32 -0
  58. data/lib/puma/thread_pool.rb +185 -0
  59. data/lib/puma/util.rb +9 -0
  60. data/lib/rack/handler/puma.rb +66 -0
  61. data/test/test_app_status.rb +92 -0
  62. data/test/test_cli.rb +173 -0
  63. data/test/test_config.rb +26 -0
  64. data/test/test_http10.rb +27 -0
  65. data/test/test_http11.rb +144 -0
  66. data/test/test_integration.rb +165 -0
  67. data/test/test_iobuffer.rb +38 -0
  68. data/test/test_minissl.rb +29 -0
  69. data/test/test_null_io.rb +31 -0
  70. data/test/test_persistent.rb +238 -0
  71. data/test/test_puma_server.rb +288 -0
  72. data/test/test_puma_server_ssl.rb +137 -0
  73. data/test/test_rack_handler.rb +10 -0
  74. data/test/test_rack_server.rb +141 -0
  75. data/test/test_tcp_rack.rb +42 -0
  76. data/test/test_thread_pool.rb +156 -0
  77. data/test/test_unix_socket.rb +39 -0
  78. data/test/test_ws.rb +89 -0
  79. data/tools/jungle/README.md +9 -0
  80. data/tools/jungle/init.d/README.md +54 -0
  81. data/tools/jungle/init.d/puma +332 -0
  82. data/tools/jungle/init.d/run-puma +3 -0
  83. data/tools/jungle/upstart/README.md +61 -0
  84. data/tools/jungle/upstart/puma-manager.conf +31 -0
  85. data/tools/jungle/upstart/puma.conf +63 -0
  86. data/tools/trickletest.rb +45 -0
  87. data/wendell-puma.gemspec +55 -0
  88. metadata +225 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 128d9e5b739839b37007cb13462c04eaaf6c7c22
4
+ data.tar.gz: 639592550765721470254b870c79e84b08a3c59e
5
+ SHA512:
6
+ metadata.gz: b01acb0320f82eb83ffe2a766929c14b6315390c1a585d847d2c7190b9bf3baef9015fc3f49c86b8597a873c8341b1b0a5c7f779fc71224cfa5abe3d70bdbd6d
7
+ data.tar.gz: 420a7c6a3750332c62c6831bf28c35c6d7fb171c8effe8f314cb78fd53d0b960c33eb67dd2c7007a775dfd989fe55cec18a7fd39bec5248618e3a840f89bdc2b
data/COPYING ADDED
@@ -0,0 +1,55 @@
1
+ Mongrel Web Server (Mongrel) is copyrighted free software by Zed A. Shaw
2
+ <zedshaw at zedshaw dot com> You can redistribute it and/or modify it under
3
+ either the terms of the GPL or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise make them
13
+ Freely Available, such as by posting said modifications to Usenet or an
14
+ equivalent medium, or by allowing the author to include your
15
+ modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) rename any non-standard executables so the names do not conflict with
21
+ standard executables, which must also be provided.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or executable
26
+ form, provided that you do at least ONE of the following:
27
+
28
+ a) distribute the executables and library files of the software,
29
+ together with instructions (in the manual page or equivalent) on where
30
+ to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of the
33
+ software.
34
+
35
+ c) give non-standard executables non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under this terms.
43
+
44
+ 5. The scripts and library files supplied as input to or produced as
45
+ output from the software do not automatically fall under the
46
+ copyright of the software, but belong to whomever generated them,
47
+ and may be sold commercially, and may be aggregated with this
48
+ software.
49
+
50
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
51
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
52
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
53
+ PURPOSE.
54
+
55
+
@@ -0,0 +1,92 @@
1
+ # Deployment engineering for puma
2
+
3
+ Puma is software that is expected to be run in a deployed environment eventually.
4
+ You can centainly use it as your dev server only, but most people look to use
5
+ it in their production deployments as well.
6
+
7
+ To that end, this is meant to serve as a foundation of wisdom how to do that
8
+ in a way that increases happiness and decreases downtime.
9
+
10
+ ## Specifying puma
11
+
12
+ Most people want to do this by putting `gem "puma"` into their Gemfile, so we'll
13
+ go ahead and assume that. Go add it now... we'll wait.
14
+
15
+
16
+ Welcome back!
17
+
18
+ ## Single vs Cluster mode
19
+
20
+ Puma was originally concieved as a thread-only webserver, but grew the ability to
21
+ also use processes in version 2.
22
+
23
+ Here are some rules of thumb:
24
+
25
+ ### MRI
26
+
27
+ * Use cluster mode and set the number of workers to 1.5x the number of cpu cores
28
+ in the machine, minimum 2.
29
+ * Set the number of threads to desired concurrent requests / number of workers.
30
+ Puma defaults to 8 and thats a decent number.
31
+
32
+ #### Migrating from Unicorn
33
+
34
+ * If you're migrating from unicorn though, here are some settings to start with:
35
+ * Set workers to half the number of unicorn workers you're using
36
+ * Set threads to 2
37
+ * Enjoy 50% memory savings
38
+ * As you grow more confident in the thread safety of your app, you can tune the
39
+ workers down and the threads up.
40
+
41
+ #### Worker utilization
42
+
43
+ **How do you know if you're got enough (or too many workers)?**
44
+
45
+ A good question. Due to MRI's GIL, only one thread can be executing Ruby code at a time.
46
+ But since so many apps are waiting on IO from DBs, etc., they can utilize threads
47
+ to make better use of the process.
48
+
49
+ The rule of thumb is you never want processes that are pegged all the time. This
50
+ means that there is more work to do that the process can get through. On the other
51
+ hand, if you have processes that sit around doing nothing, then they're just eating
52
+ up resources.
53
+
54
+ Watching your CPU utilization over time and aim for about 70% on average. This means
55
+ you've got capacity still but aren't starving threads.
56
+
57
+ ## Daemonizing
58
+
59
+ I prefer to not daemonize my servers and use something like `runit` or `upstart` to
60
+ monitor them as child processes. This gives them fast response to crashes and
61
+ makes it easy to figure out what is going on. Additionally, unlike `unicorn`,
62
+ puma does not require daemonization to do zero-downtime restarts.
63
+
64
+ I see people using daemonization because they start puma directly via capistrano
65
+ task and thus want it to live on past the `cap deploy`. To this people I said:
66
+ You need to be using a process monitor. Nothing is making sure puma stays up in
67
+ this scenario! You're just waiting for something weird to happen, puma to die,
68
+ and to get paged at 3am. Do yourself a favor, at least the process monitoring
69
+ your OS comes with, be it `sysvinit`, `upstart`, or `systemd`. Or branch out
70
+ and use `runit` or hell, even `monit`.
71
+
72
+ ## Restarting
73
+
74
+ You probably will want to deploy some new code at some point, and you'd like
75
+ puma to start running that new code. Minimizing the amount of time the server
76
+ is unavailable would be nice as well. Here's how to do it:
77
+
78
+ 1. Don't use `preload!`. This dirties the master process and means it will have
79
+ to shutdown all the workers and re-exec itself to get your new code, which means
80
+ much higher waiting around for things to load.
81
+
82
+ 1. Use `prune_bundler`. This makes it so that the cluster master will detach itself
83
+ from a Bundler context on start. This allows the cluster workers to load your app
84
+ and start a brand new Bundler context within the worker only. This means your
85
+ master remains pristine and can live on between new releases of your code.
86
+
87
+ 1. Use phased-restart (`SIGUSR1` or `pumactl phased-restart`). This tells the master
88
+ to kill off one worker at a time and restart them in your new code. This minimizes
89
+ downtime and staggers the restart nicely. **WARNING** This means that both your
90
+ old code and your new code will be running concurrently. Most deployment solutions
91
+ already cause that, but it's worth warning you about it again. Be careful with your
92
+ migrations, etc!
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "hoe"
4
+ gem "hoe-git"
5
+ gem "hoe-ignore"
6
+ gem "rdoc"
7
+ gem "rake-compiler"
8
+ gem "rack"
9
+
10
+ gem 'minitest', '~> 4.0'
11
+
12
+ gem "jruby-openssl", :platform => "jruby"
13
+
14
+ platforms :rbx do
15
+ gem 'rubysl', '~> 2.0'
16
+ end
17
+
@@ -0,0 +1,588 @@
1
+ === 2.9.2 / 1024-10-25
2
+
3
+ * 8 bug fixes:
4
+ * Fix puma-wild handling a restart properly. Fixes #550
5
+ * JRuby SSL POODLE update
6
+ * Keep deprecated features warnings
7
+ * Log the current time when Puma shuts down.
8
+ * Fix cross-platform extension library detection
9
+ * Use the correct Windows names for OpenSSL.
10
+ * Better error logging during startup
11
+ * Fixing sexist error messages
12
+
13
+ * 6 PRs merged:
14
+ * Merge pull request #549 from bsnape/log-shutdown-time
15
+ * Merge pull request #553 from lowjoel/master
16
+ * Merge pull request #568 from mariuz/patch-1
17
+ * Merge pull request #578 from danielbuechele/patch-1
18
+ * Merge pull request #581 from alexch/slightly-better-logging
19
+ * Merge pull request #590 from looker/jruby_disable_sslv3
20
+
21
+ === 2.9.1 / 2014-09-05
22
+
23
+ * 4 bug fixes:
24
+ * Cleanup the SSL related structures properly, fixes memory leak
25
+ * Fix thread spawning edge case.
26
+ * Force a worker check after a worker boots, don't wait 5sec. Fixes #574
27
+ * Implement SIGHUP for logs reopening
28
+
29
+ * 2 PRs merged:
30
+ * Merge pull request #561 from theoldreader/sighup
31
+ * Merge pull request #570 from havenwood/spawn-thread-edge-case
32
+
33
+ === 2.9.0 / 2014-07-12
34
+
35
+ * 1 minor feature:
36
+ * Add SSL support for JRuby
37
+
38
+ * 3 bug fixes:
39
+ * Typo BUNDLER_GEMFILE -> BUNDLE_GEMFILE
40
+ * Use fast_write because we can't trust syswrite
41
+ * pumactl - do not modify original ARGV
42
+
43
+ * 4 doc fixes:
44
+ * BSD-3-Clause over BSD to avoid confusion
45
+ * Deploy doc: clarification of the GIL
46
+ * Fix typo in DEPLOYMENT.md
47
+ * Update README.md
48
+
49
+ * 6 PRs merged:
50
+ * Merge pull request #520 from misfo/patch-2
51
+ * Merge pull request #530 from looker/jruby-ssl
52
+ * Merge pull request #537 from vlmonk/patch-1
53
+ * Merge pull request #540 from allaire/patch-1
54
+ * Merge pull request #544 from chulkilee/bsd-3-clause
55
+ * Merge pull request #551 from jcxplorer/patch-1
56
+
57
+ === 2.8.2 / 2014-04-12
58
+
59
+ * 4 bug fixes:
60
+ * During upgrade, change directory in main process instead of workers.
61
+ * Close the client properly on error
62
+ * Capistrano: fallback from phased restart to start when not started
63
+ * Allow tag option in conf file
64
+
65
+ * 4 doc fixes:
66
+ * Fix Puma daemon service README typo
67
+ * `preload_app!` instead of `preload_app`
68
+ * add preload_app and prune_bundler to example config
69
+ * allow changing of worker_timeout in config file
70
+
71
+ * 11 PRs merged:
72
+ * Merge pull request #487 from ckuttruff/master
73
+ * Merge pull request #492 from ckuttruff/master
74
+ * Merge pull request #493 from alepore/config_tag
75
+ * Merge pull request #503 from mariuz/patch-1
76
+ * Merge pull request #505 from sammcj/patch-1
77
+ * Merge pull request #506 from FlavourSys/config_worker_timeout
78
+ * Merge pull request #510 from momer/rescue-block-handle-servers-fix
79
+ * Merge pull request #511 from macool/patch-1
80
+ * Merge pull request #514 from edogawaconan/refactor_env
81
+ * Merge pull request #517 from misfo/patch-1
82
+ * Merge pull request #518 from LongMan/master
83
+
84
+ === 2.8.1 / 2014-03-06
85
+
86
+ * 1 bug fixes:
87
+ * Run puma-wild with proper deps for prune_bundler
88
+
89
+ * 2 doc changes:
90
+ * Described the configuration file finding behavior added in 2.8.0 and how to disable it.
91
+ * Start the deployment doc
92
+
93
+ * 6 PRs merged:
94
+ * Merge pull request #471 from arthurnn/fix_test
95
+ * Merge pull request #485 from joneslee85/patch-9
96
+ * Merge pull request #486 from joshwlewis/patch-1
97
+ * Merge pull request #490 from tobinibot/patch-1
98
+ * Merge pull request #491 from brianknight10/clarify-no-config
99
+
100
+ === 2.8.0 / 2014-02-28
101
+
102
+ * 8 minor features:
103
+ * Add ability to autoload a config file. Fixes #438
104
+ * Add ability to detect and terminate hung workers. Fixes #333
105
+ * Add booted_workers to stats response
106
+ * Add config to customize the default error message
107
+ * Add prune_bundler option
108
+ * Add worker indexes, expose them via on_worker_boot. Fixes #440
109
+ * Add pretty process name
110
+ * Show the ruby version in use
111
+
112
+ * 7 bug fixes:
113
+ * Added 408 status on timeout.
114
+ * Be more hostile with sockets that write block. Fixes #449
115
+ * Expect at_exit to exclusively remove the pidfile. Fixes #444
116
+ * Expose latency and listen backlog via bind query. Fixes #370
117
+ * JRuby raises IOError if the socket is there. Fixes #377
118
+ * Process requests fairly. Fixes #406
119
+ * Rescue SystemCallError as well. Fixes #425
120
+
121
+ * 4 doc changes:
122
+ * Add 2.1.0 to the matrix
123
+ * Add Code Climate badge to README
124
+ * Create signals.md
125
+ * Set the license to BSD. Fixes #432
126
+
127
+ * 14 PRs merged:
128
+ * Merge pull request #428 from alexeyfrank/capistrano_default_hooks
129
+ * Merge pull request #429 from namusyaka/revert-const_defined
130
+ * Merge pull request #431 from mrb/master
131
+ * Merge pull request #433 from alepore/process-name
132
+ * Merge pull request #437 from ibrahima/master
133
+ * Merge pull request #446 from sudara/master
134
+ * Merge pull request #451 from pwiebe/status_408
135
+ * Merge pull request #453 from joevandyk/patch-1
136
+ * Merge pull request #470 from arthurnn/fix_458
137
+ * Merge pull request #472 from rubencaro/master
138
+ * Merge pull request #480 from jjb/docs-on-running-test-suite
139
+ * Merge pull request #481 from schneems/master
140
+ * Merge pull request #482 from prathamesh-sonpatki/signals-doc-cleanup
141
+ * Merge pull request #483 from YotpoLtd/master
142
+
143
+ === 2.7.1 / 2013-12-05
144
+
145
+ * 1 bug fix:
146
+
147
+ * Keep STDOUT/STDERR the right mode. Fixes #422
148
+
149
+ === 2.7.0 / 2013-12-03
150
+
151
+ * 1 minor feature:
152
+ * Adding TTIN and TTOU to increment/decrement workers
153
+
154
+ * N bug fixes:
155
+ * Always use our Process.daemon because it's not busted
156
+ * Add capistrano restart failback to start.
157
+ * Change position of `cd` so that rvm gemset is loaded
158
+ * Clarify some platform specifics
159
+ * Do not close the pipe sockets when retrying
160
+ * Fix String#byteslice for Ruby 1.9.1, 1.9.2
161
+ * Fix compatibility with 1.8.7.
162
+ * Handle IOError closed stream in IO.select
163
+ * Increase the max URI path length to 2048 chars from 1024 chars
164
+ * Upstart jungle use config/puma.rb instead
165
+
166
+ === 2.6.0 / 2013-09-13
167
+
168
+ * 2 minor features:
169
+ * Add support for event hooks
170
+ ** Add a hook for state transitions
171
+ * Add phased restart to capistrano recipe.
172
+
173
+ * 4 bug fixes:
174
+ * Convince workers to stop by SIGKILL after timeout
175
+ * Define RSTRING_NOT_MODIFIED for Rubinius performance
176
+ * Handle BrokenPipe, StandardError and IOError in fat_wrote and break out
177
+ * Return success status to the invoking environment
178
+
179
+ === 2.5.1 / 2013-08-13
180
+
181
+ * 2 bug fixes:
182
+
183
+ * Keep jruby daemon mode from retrying on a hot restart
184
+ * Extract version from const.rb in gemspec
185
+
186
+ === 2.5.0 / 2013-08-08
187
+
188
+ * 2 minor features:
189
+ * Allow configuring pumactl with config.rb
190
+ * make `pumactl restart` start puma if not running
191
+
192
+ * 6 bug fixes:
193
+ * Autodetect ruby managers and home directory in upstart script
194
+ * Convert header values to string before sending.
195
+ * Correctly report phased-restart availability
196
+ * Fix pidfile creation/deletion race on jruby daemonization
197
+ * Use integers when comparing thread counts
198
+ * Fix typo in using lopez express (raw tcp) mode
199
+
200
+ * 6 misc changes:
201
+ * Fix typo in phased-restart response
202
+ * Uncomment setuid/setgid by default in upstart
203
+ * Use Puma::Const::PUMA_VERSION in gemspec
204
+ * Update upstart comments to reflect new commandline
205
+ * Remove obsolete pumactl instructions; refer to pumactl for details
206
+ * Make Bundler used puma.gemspec version agnostic
207
+
208
+ === 2.4.1 / 2013-08-07
209
+
210
+ * 1 experimental feature:
211
+ * Support raw tcp servers (aka Lopez Express mode)
212
+
213
+ === 2.4.0 / 2013-07-22
214
+
215
+ * 5 minor features:
216
+ * Add PUMA_JRUBY_DAEMON_OPTS to get around agent starting twice
217
+ * Add ability to drain accept socket on shutdown
218
+ * Add port to DSL
219
+ * Adds support for using puma config file in capistrano deploys.
220
+ * Make phased_restart fallback to restart if not available
221
+
222
+ * 10 bug fixes:
223
+
224
+ * Be sure to only delete the pid in the master. Fixes #334
225
+ * Call out -C/--config flags
226
+ * Change parser symbol names to avoid clash. Fixes #179
227
+ * Convert thread pool sizes to integers
228
+ * Detect when the jruby daemon child doesn't start properly
229
+ * Fix typo in CLI help
230
+ * Improve the logging output when hijack is used. Fixes #332
231
+ * Remove unnecessary thread pool size conversions
232
+ * Setup :worker_boot as an Array. Fixes #317
233
+ * Use 127.0.0.1 as REMOTE_ADDR of unix client. Fixes #309
234
+
235
+
236
+ === 2.3.2 / 2013-07-08
237
+
238
+ * 1 bug fix:
239
+
240
+ * Move starting control server to after daemonization.
241
+
242
+ === 2.3.1 / 2013-07-06
243
+
244
+ * 2 bug fixes:
245
+
246
+ * Include the right files in the Manifest.
247
+ * Disable inheriting connections on restart on windows. Fixes #166
248
+
249
+ * 1 doc change:
250
+ * Better document some platform constraints
251
+
252
+ === 2.3.0 / 2013-07-05
253
+
254
+ * 1 major bug fix:
255
+
256
+ * Stabilize control server, add support in cluster mode
257
+
258
+ * 5 minor bug fixes:
259
+
260
+ * Add ability to cleanup stale unix sockets
261
+ * Check status data better. Fixes #292
262
+ * Convert raw IO errors to ConnectionError. Fixes #274
263
+ * Fix sending Content-Type and Content-Length for no body status. Fixes #304
264
+ * Pass state path through to `pumactl start`. Fixes #287
265
+
266
+ * 2 internal changes:
267
+
268
+ * Refactored modes into seperate classes that CLI uses
269
+ * Changed CLI to take an Events object instead of stdout/stderr (API change)
270
+
271
+ === 2.2.2 / 2013-07-02
272
+
273
+ * 1 bug fix:
274
+
275
+ * Fix restart_command in the config
276
+
277
+ === 2.2.1 / 2013-07-02
278
+
279
+ * 1 minor feature:
280
+
281
+ * Introduce preload flag
282
+
283
+ * 1 bug fix:
284
+
285
+ * Pass custom restart command in JRuby
286
+
287
+ === 2.2.0 / 2013-07-01
288
+
289
+ * 1 major feature:
290
+
291
+ * Add ability to preload rack app
292
+
293
+ * 2 minor bugfixes:
294
+
295
+ * Don't leak info when not in development. Fixes #256
296
+ * Load the app, then bind the ports
297
+
298
+ === 2.1.1 / 2013-06-20
299
+
300
+ * 2 minor bug fixes:
301
+
302
+ * Fix daemonization on jruby
303
+ * Load the application before daemonizing. Fixes #285
304
+
305
+ === 2.1.0 / 2013-06-18
306
+
307
+ * 3 minor features:
308
+ * Allow listening socket to be configured via Capistrano variable
309
+ * Output results from 'stat's command when using pumactl
310
+ * Support systemd socket activation
311
+
312
+ * 15 bug fixes:
313
+ * Deal with pipes closing while stopping. Fixes #270
314
+ * Error out early if there is no app configured
315
+ * Handle ConnectionError rather than the lowlevel exceptions
316
+ * tune with `-C` config file and `on_worker_boot`
317
+ * use `-w`
318
+ * Fixed some typos in upstart scripts
319
+ * Make sure to use bytesize instead of size (MiniSSL write)
320
+ * Fix an error in puma-manager.conf
321
+ * fix: stop leaking sockets on restart (affects ruby 1.9.3 or before)
322
+ * Ignore errors on the cross-thread pipe. Fixes #246
323
+ * Ignore errors while uncorking the socket (it might already be closed)
324
+ * Ignore the body on a HEAD request. Fixes #278
325
+ * Handle all engine data when possible. Fixes #251.
326
+ * Handle all read exceptions properly. Fixes #252
327
+ * Handle errors from the server better
328
+
329
+ * 3 doc changes:
330
+ * Add note about on_worker_boot hook
331
+ * Add some documentation for Clustered mode
332
+ * Added quotes to /etc/puma.conf
333
+
334
+ === 2.0.1 / 2013-04-30
335
+
336
+ * 1 bug fix:
337
+
338
+ * Fix not starting on JRuby properly
339
+
340
+ === 2.0.0 / 2013-04-29
341
+
342
+ RailsConf 2013 edition!
343
+
344
+ * 2 doc changes:
345
+ * Start with rackup -s Puma, NOT rackup -s puma.
346
+ * Minor doc fixes in the README.md, Capistrano section
347
+
348
+ * 2 bug fixes:
349
+ * Fix reading RACK_ENV properly. Fixes #234
350
+ * Make cap recipe handle tmp/sockets; fixes #228
351
+
352
+ * 3 minor changes:
353
+ * Fix capistrano recipe
354
+ * Fix stdout/stderr logs to sync outputs
355
+ * allow binding to IPv6 addresses
356
+
357
+ === 2.0.0.b7 / 2013-03-18
358
+
359
+ * 5 minor enhancements:
360
+
361
+ * Add -q option for :start
362
+ * Add -V, --version
363
+ * Add default Rack handler helper
364
+ * Upstart support
365
+ * Set worker directory from configuration file
366
+
367
+ * 12 bug fixes:
368
+
369
+ * Close the binder in the right place. Fixes #192
370
+ * Handle early term in workers. Fixes #206
371
+ * Make sure that the default port is 80 when the request doesn't include HTTP_X_FORWARDED_PROTO.
372
+ * Prevent Errno::EBADF errors on restart when running ruby 2.0
373
+ * Record the proper @master_pid
374
+ * Respect the header HTTP_X_FORWARDED_PROTO when the host doesn't include a port number.
375
+ * Retry EAGAIN/EWOULDBLOCK during syswrite
376
+ * Run exec properly to restart. Fixes #154
377
+ * Set Rack run_once to false
378
+ * Syncronize all access to @timeouts. Fixes #208
379
+ * Write out the state post-daemonize. Fixes #189
380
+ * Prevent crash when all workers are gone
381
+
382
+ === 2.0.0.b6 / 2013-02-06
383
+
384
+ * 2 minor enhancements:
385
+
386
+ * Add hook for running when a worker boots
387
+ * Advertise the Configuration object for apps to use.
388
+
389
+ * 1 bug fix:
390
+
391
+ * Change directory in working during upgrade. Fixes #185
392
+
393
+ === 2.0.0.b5 / 2013-02-05
394
+
395
+ * 2 major features:
396
+ * Add phased worker upgrade
397
+ * Add support for the rack hijack protocol
398
+
399
+ * 2 minor features:
400
+ * Add -R to specify the restart command
401
+ * Add config file option to specify the restart command
402
+
403
+ * 5 bug fixes:
404
+ * Cleanup pipes properly. Fixes #182
405
+ * Daemonize earlier so that we don't lose app threads. Fixes #183
406
+ * Drain the notification pipe. Fixes #176, thanks @cryo28
407
+ * Move write_pid to after we daemonize. Fixes #180
408
+ * Redirect IO properly and emit message for checkpointing
409
+
410
+ === 2.0.0.b4 / 2012-12-12
411
+
412
+ * 4 bug fixes:
413
+ * Properly check #syswrite's value for variable sized buffers. Fixes #170
414
+ * Shutdown status server properly
415
+ * Handle char vs byte and mixing syswrite with write properly
416
+ * made MiniSSL validate key/cert file existence
417
+
418
+ === 2.0.0.b3 / 2012-11-22
419
+
420
+ * 1 bug fix:
421
+ * Package right files in gem
422
+
423
+ === 2.0.0.b2 / 2012-11-18
424
+ * 5 minor feature:
425
+ * Now Puma is bundled with an capistrano recipe. Just require
426
+ 'puma/capistrano' in you deploy.rb
427
+ * Only inject CommonLogger in development mode
428
+ * Add -p option to pumactl
429
+ * Add ability to use pumactl to start a server
430
+ * Add options to daemonize puma
431
+
432
+ * 7 bug fixes:
433
+ * Reset the IOBuffer properly. Fixes #148
434
+ * Shutdown gracefully on JRuby with Ctrl-C
435
+ * Various methods to get newrelic to start. Fixes #128
436
+ * fixing syntax error at capistrano recipe
437
+ * Force ECONNRESET when read returns nil
438
+ * Be sure to empty the drain the todo before shutting down. Fixes #155
439
+ * allow for alternate locations for status app
440
+
441
+ === 2.0.0.b1 / 2012-09-11
442
+
443
+ * 1 major feature:
444
+ * Optional worker process mode (-w) to allow for process scaling in
445
+ addition to thread scaling
446
+
447
+ * 1 bug fix:
448
+ * Introduce Puma::MiniSSL to be able to properly control doing
449
+ nonblocking SSL
450
+
451
+ NOTE: SSL support in JRuby is not supported at present. Support will
452
+ be added back in a future date when a java Puma::MiniSSL is added.
453
+
454
+ === 1.6.3 / 2012-09-04
455
+
456
+ * 1 bug fix:
457
+ * Close sockets waiting in the reactor when a hot restart is performed
458
+ so that browsers reconnect on the next request
459
+
460
+ === 1.6.2 / 2012-08-27
461
+
462
+ * 1 bug fix:
463
+ * Rescue StandardError instead of IOError to handle SystemCallErrors
464
+ as well as other application exceptions inside the reactor.
465
+
466
+ === 1.6.1 / 2012-07-23
467
+
468
+ * 1 packaging bug fixed:
469
+ * Include missing files
470
+
471
+ === 1.6.0 / 2012-07-23
472
+
473
+ * 1 major bug fix:
474
+ * Prevent slow clients from starving the server by introducing a
475
+ dedicated IO reactor thread. Credit for reporting goes to @meh.
476
+
477
+ === 1.5.0 / 2012-07-19
478
+
479
+ * 7 contributers to this release:
480
+ * Christian Mayer
481
+ * Darío Javier Cravero
482
+ * Dirkjan Bussink
483
+ * Gianluca Padovani
484
+ * Santiago Pastorino
485
+ * Thibault Jouan
486
+ * tomykaira
487
+
488
+ * 6 bug fixes:
489
+ * Define RSTRING_NOT_MODIFIED for Rubinius
490
+ * Convert status to integer. Fixes #123
491
+ * Delete pidfile when stopping the server
492
+ * Allow compilation with -Werror=format-security option
493
+ * Fix wrong HTTP version for a HTTP/1.0 request
494
+ * Use String#bytesize instead of String#length
495
+
496
+ * 3 minor features:
497
+ * Added support for setting RACK_ENV via the CLI, config file, and rack app
498
+ * Allow Server#run to run sync. Fixes #111
499
+ * Puma can now run on windows
500
+
501
+ === 1.4.0 / 2012-06-04
502
+
503
+ * 1 bug fix:
504
+ * SCRIPT_NAME should be passed from env to allow mounting apps
505
+
506
+ * 1 experimental feature:
507
+ * Add puma.socket key for direct socket access
508
+
509
+ === 1.3.1 / 2012-05-15
510
+
511
+ * 2 bug fixes:
512
+ * use #bytesize instead of #length for Content-Length header
513
+ * Use StringIO properly. Fixes #98
514
+
515
+ === 1.3.0 / 2012-05-08
516
+
517
+ * 2 minor features:
518
+ * Return valid Rack responses (passes Lint) from status server
519
+ * Add -I option to specify $LOAD_PATH directories
520
+
521
+ * 4 bug fixes:
522
+ * Don't join the server thread inside the signal handle. Fixes #94
523
+ * Make NullIO#read mimic IO#read
524
+ * Only stop the status server if it's started. Fixes #84
525
+ * Set RACK_ENV early in cli also. Fixes #78
526
+
527
+ * 1 new contributer:
528
+ * Jesse Cooke
529
+
530
+ === 1.2.2 / 2012-04-28
531
+
532
+ * 4 bug fixes:
533
+
534
+ * Report a lowlevel error to stderr
535
+ * Set a fallback SERVER_NAME and SERVER_PORT
536
+ * Keep the encoding of the body correct. Fixes #79
537
+ * show error.to_s along with backtrace for low-level error
538
+
539
+ === 1.2.1 / 2012-04-11
540
+
541
+ 1 bug fix:
542
+
543
+ * Fix rack.url_scheme for SSL servers. Fixes #65
544
+
545
+ === 1.2.0 / 2012-04-11
546
+
547
+ 1 major feature:
548
+
549
+ * When possible, the internal restart does a "hot restart" meaning
550
+ the server sockets remains open, so no connections are lost.
551
+
552
+ 1 minor feature:
553
+
554
+ * More helpful fallback error message
555
+
556
+ 6 bug fixes:
557
+
558
+ * Pass the proper args to unknown_error. Fixes #54, #58
559
+ * Stop the control server before restarting. Fixes #61
560
+ * Fix reporting https only on a true SSL connection
561
+ * Set the default content type to 'text/plain'. Fixes #63
562
+ * Use REUSEADDR. Fixes #60
563
+ * Shutdown gracefull on SIGTERM. Fixes #53
564
+
565
+ 2 new contributers:
566
+
567
+ * Seamus Abshere
568
+ * Steve Richert
569
+
570
+ === 1.1.1 / 2012-03-30
571
+
572
+ 1 bugfix:
573
+
574
+ * Include puma/compat.rb in the gem (oops!)
575
+
576
+ === 1.1.0 / 2012-03-30
577
+
578
+ 1 bugfix:
579
+
580
+ * Make sure that the unix socket has the perms 0777 by default
581
+
582
+ 1 minor feature:
583
+
584
+ * Add umask param to the unix:// bind to set the umask
585
+
586
+ === 1.0.0 / 2012-03-29
587
+
588
+ * Released!