|  | 
|  | 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