|
| 1 | +# frozen_string_literal: true |
| 2 | + |
| 3 | +# Puma can serve each request in a thread from an internal thread pool. |
| 4 | +# The `threads` method setting takes two numbers: a minimum and maximum. |
| 5 | +# Any libraries that use thread pools should be configured to match |
| 6 | +# the maximum value specified for Puma. Default is set to 5 threads for minimum |
| 7 | +# and maximum; this matches the default thread size of Active Record. |
| 8 | +# |
| 9 | +threads_count = Integer(ENV.fetch('RAILS_MAX_THREADS') { 5 }) |
| 10 | +threads threads_count, threads_count |
| 11 | + |
| 12 | +# Specifies the `port` that Puma will listen on to receive requests; default is 5000. |
| 13 | +# |
| 14 | +port ENV.fetch('PORT') { 5000 } |
| 15 | + |
| 16 | +# Specifies the `environment` that Puma will run in. |
| 17 | +# |
| 18 | +environment ENV.fetch('RAILS_ENV') { 'development' } |
| 19 | + |
| 20 | +# Specifies the number of `workers` to boot in clustered mode. |
| 21 | +# Workers are forked webserver processes. If using threads and workers together |
| 22 | +# the concurrency of the application would be max `threads` * `workers`. |
| 23 | +# Workers do not work on JRuby or Windows (both of which do not support |
| 24 | +# processes). |
| 25 | +# |
| 26 | +workers Integer(ENV.fetch('WEB_CONCURRENCY') { 3 }) |
| 27 | + |
| 28 | +# Use the `preload_app!` method when specifying a `workers` number. |
| 29 | +# This directive tells Puma to first boot the application and load code |
| 30 | +# before forking the application. This takes advantage of Copy On Write |
| 31 | +# process behavior so workers use less memory. If you use this option |
| 32 | +# you need to make sure to reconnect any threads in the `on_worker_boot` |
| 33 | +# block. |
| 34 | +# |
| 35 | +preload_app! |
| 36 | + |
| 37 | +# If you are preloading your application and using Active Record, it's |
| 38 | +# recommended that you close any connections to the database before workers |
| 39 | +# are forked to prevent connection leakage. |
| 40 | +# |
| 41 | +before_fork do |
| 42 | + ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) |
| 43 | +end |
| 44 | + |
| 45 | +# The code in the `on_worker_boot` will be called if you are using |
| 46 | +# clustered mode by specifying a number of `workers`. After each worker |
| 47 | +# process is booted, this block will be run. If you are using the `preload_app!` |
| 48 | +# option, you will want to use this block to reconnect to any threads |
| 49 | +# or connections that may have been created at application boot, as Ruby |
| 50 | +# cannot share connections between processes. |
| 51 | +# |
| 52 | +on_worker_boot do |
| 53 | + ActiveRecord::Base.establish_connection if defined?(ActiveRecord) |
| 54 | +end |
| 55 | + |
| 56 | +# Allow puma to be restarted by `rails restart` command. |
| 57 | +plugin :tmp_restart |
0 commit comments