|
1 |
| -# Puma can serve each request in a thread from an internal thread pool. |
2 |
| -# The `threads` method setting takes two numbers: a minimum and maximum. |
3 |
| -# Any libraries that use thread pools should be configured to match |
4 |
| -# the maximum value specified for Puma. Default is set to 5 threads for minimum |
5 |
| -# and maximum; this matches the default thread size of Active Record. |
6 |
| -# |
7 |
| -max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } |
8 |
| -min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } |
9 |
| -threads min_threads_count, max_threads_count |
| 1 | +# This configuration file will be evaluated by Puma. The top-level methods that |
| 2 | +# are invoked here are part of Puma's configuration DSL. For more information |
| 3 | +# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html. |
10 | 4 |
|
11 |
| -# Specifies the `worker_timeout` threshold that Puma will use to wait before |
12 |
| -# terminating a worker in development environments. |
| 5 | +# Puma starts a configurable number of processes (workers) and each process |
| 6 | +# serves each request in a thread from an internal thread pool. |
13 | 7 | #
|
14 |
| -worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" |
15 |
| - |
16 |
| -# Specifies the `port` that Puma will listen on to receive requests; default is 3000. |
| 8 | +# The ideal number of threads per worker depends both on how much time the |
| 9 | +# application spends waiting for IO operations and on how much you wish to |
| 10 | +# to prioritize throughput over latency. |
17 | 11 | #
|
18 |
| -port ENV.fetch("PORT") { 3000 } |
19 |
| - |
20 |
| -# Specifies the `environment` that Puma will run in. |
| 12 | +# As a rule of thumb, increasing the number of threads will increase how much |
| 13 | +# traffic a given process can handle (throughput), but due to CRuby's |
| 14 | +# Global VM Lock (GVL) it has diminishing returns and will degrade the |
| 15 | +# response time (latency) of the application. |
| 16 | +# |
| 17 | +# The default is set to 3 threads as it's deemed a decent compromise between |
| 18 | +# throughput and latency for the average Rails application. |
21 | 19 | #
|
22 |
| -environment ENV.fetch("RAILS_ENV") { "development" } |
| 20 | +# Any libraries that use a connection pool or another resource pool should |
| 21 | +# be configured to provide at least as many connections as the number of |
| 22 | +# threads. This includes Active Record's `pool` parameter in `database.yml`. |
| 23 | +threads_count = ENV.fetch("RAILS_MAX_THREADS", 3) |
| 24 | +threads threads_count, threads_count |
| 25 | + |
| 26 | +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. |
| 27 | +port ENV.fetch("PORT", 3000) |
23 | 28 |
|
24 |
| -# Specifies the `pidfile` that Puma will use. |
25 |
| -pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } |
| 29 | +# Allow puma to be restarted by `bin/rails restart` command. |
| 30 | +plugin :tmp_restart |
26 | 31 |
|
27 |
| -# Specifies the number of `workers` to boot in clustered mode. |
28 |
| -# Workers are forked web server processes. If using threads and workers together |
29 |
| -# the concurrency of the application would be max `threads` * `workers`. |
30 |
| -# Workers do not work on JRuby or Windows (both of which do not support |
31 |
| -# processes). |
32 |
| -# |
33 |
| -workers ENV.fetch("WEB_CONCURRENCY") { 2 } |
| 32 | +# Specify the PID file. Defaults to tmp/pids/server.pid in development. |
| 33 | +# In other environments, only set the PID file if requested. |
| 34 | +pidfile ENV["PIDFILE"] if ENV["PIDFILE"] |
34 | 35 |
|
35 | 36 | # Use the `preload_app!` method when specifying a `workers` number.
|
36 | 37 | # This directive tells Puma to first boot the application and load code
|
37 | 38 | # before forking the application. This takes advantage of Copy On Write
|
38 | 39 | # process behavior so workers use less memory.
|
39 |
| -# |
40 | 40 | preload_app!
|
41 | 41 |
|
42 | 42 | before_fork do
|
|
47 | 47 |
|
48 | 48 | PumaWorkerKiller.enable_rolling_restart # Default is every 6 hours
|
49 | 49 | end
|
50 |
| - |
51 |
| -# Allow puma to be restarted by `rails restart` command. |
52 |
| -plugin :tmp_restart |
0 commit comments