2017-09-05 22:23:34 +03:00
# Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum, this matches the default thread size of Active Record.
#
threads_count = ENV . fetch ( " RAILS_MAX_THREADS " ) { 5 } . to_i
threads threads_count , threads_count
# Specifies the `port` that Puma will listen on to receive requests, default is 3000.
#
port ENV . fetch ( " PORT " ) { 3000 }
# Specifies the `environment` that Puma will run in.
#
environment ENV . fetch ( " RAILS_ENV " ) { " development " }
# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked webserver processes. If using threads and workers together
# the concurrency of the application would be max `threads` * `workers`.
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
2019-03-27 10:58:10 +01:00
workers ENV . fetch ( " WEB_CONCURRENCY " ) { 1 }
2017-09-05 22:23:34 +03:00
# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory. If you use this option
# you need to make sure to reconnect any threads in the `on_worker_boot`
# block.
#
2017-11-07 22:02:10 +02:00
preload_app!
2017-09-05 22:23:34 +03:00
# The code in the `on_worker_boot` will be called if you are using
# clustered mode by specifying a number of `workers`. After each worker
# process is booted this block will be run, if you are using `preload_app!`
# option you will want to use this block to reconnect to any threads
# or connections that may have been created at application boot, Ruby
# cannot share connections between processes.
#
2017-11-07 22:02:10 +02:00
on_worker_boot do
ActiveRecord :: Base . establish_connection if defined? ( ActiveRecord )
end
2017-09-05 22:23:34 +03:00
2020-02-05 23:25:00 -08:00
lowlevel_error_handler do | ex , env |
2021-02-20 09:50:48 -08:00
Sentry . capture_exception (
2020-02-05 23:25:00 -08:00
ex ,
2021-02-24 20:53:28 -08:00
message : ex . message ,
extra : { puma : env } ,
transaction : " Puma "
2020-02-05 23:25:00 -08:00
)
# note the below is just a Rack response
[ 500 , { } , [ " An error has occurred, and engineers have been informed. Please reload the page. If you continue to have problems, contact conference@snap.berkeley.edu \n " ] ]
end
2017-09-05 22:23:34 +03:00
# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart