|
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. |
21 | 16 | # |
22 | | -environment ENV.fetch("RAILS_ENV") { "development" } |
23 | | - |
24 | | -# Specifies the `pidfile` that Puma will use. |
25 | | -pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } |
26 | | - |
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). |
| 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. |
32 | 19 | # |
33 | | -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } |
| 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 |
34 | 25 |
|
35 | | -# Use the `preload_app!` method when specifying a `workers` number. |
36 | | -# This directive tells Puma to first boot the application and load code |
37 | | -# before forking the application. This takes advantage of Copy On Write |
38 | | -# process behavior so workers use less memory. |
39 | | -# |
40 | | -# preload_app! |
| 26 | +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. |
| 27 | +port ENV.fetch("PORT", 3000) |
41 | 28 |
|
42 | | -# Allow puma to be restarted by `rails restart` command. |
| 29 | +# Allow puma to be restarted by `bin/rails restart` command. |
43 | 30 | plugin :tmp_restart |
| 31 | + |
| 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"] |
0 commit comments