Table of Contents - puma-3.6.0 Documentation
Pages
DEPLOYMENT
Deployment engineering for puma
Specifying puma
Single vs Cluster mode
MRI
Migrating from Unicorn
Worker utilization
Daemonizing
Restarting
History
3.6.0 / 2016-07-24
3.5.2 / 2016-07-20
3.5.1 / 2016-07-20
3.5.0 / 2016-07-18
3.4.0 / 2016-04-07
3.3.0 / 2016-04-05
3.2.0 / 2016-03-20
3.1.1 / 2016-03-17
3.1.0 / 2016-03-05
3.0.2 / 2016-02-26
3.0.1 / 2016-02-25
3.0.0 / 2016-02-25
2.16.0 / 2016-01-27
2.15.3 / 2015-11-07
2.15.2 / 2015-11-06
2.15.1 / 2015-11-06
2.15.0 / 2015-11-06
2.14.0 / 2015-09-18
2.13.4 / 2015-08-16
2.13.3 / 2015-08-15
2.13.2 / 2015-08-15
2.13.1 / 2015-08-15
2.13.0 / 2015-08-14
2.12.3 / 2015-08-03
2.12.2 / 2015-07-17
2.12.1 / 2015-07-16
2.12.0 / 2015-07-14
2.11.3 / 2015-05-18
2.11.2 / 2015-04-11
2.11.1 / 2015-02-11
2.11.0 / 2015-01-20
2.10.2 / 2014-11-26
2.10.1 / 2014-11-24
2.10.0 / 2014-11-23
2.9.2 / 2014-10-25
2.9.1 / 2014-09-05
2.9.0 / 2014-07-12
2.8.2 / 2014-04-12
2.8.1 / 2014-03-06
2.8.0 / 2014-02-28
2.7.1 / 2013-12-05
2.7.0 / 2013-12-03
2.6.0 / 2013-09-13
2.5.1 / 2013-08-13
2.5.0 / 2013-08-08
2.4.1 / 2013-08-07
2.4.0 / 2013-07-22
2.3.2 / 2013-07-08
2.3.1 / 2013-07-06
2.3.0 / 2013-07-05
2.2.2 / 2013-07-02
2.2.1 / 2013-07-02
2.2.0 / 2013-07-01
2.1.1 / 2013-06-20
2.1.0 / 2013-06-18
2.0.1 / 2013-04-30
2.0.0 / 2013-04-29
2.0.0.b7 / 2013-03-18
2.0.0.b6 / 2013-02-06
2.0.0.b5 / 2013-02-05
2.0.0.b4 / 2012-12-12
2.0.0.b3 / 2012-11-22
2.0.0.b2 / 2012-11-18
2.0.0.b1 / 2012-09-11
1.6.3 / 2012-09-04
1.6.2 / 2012-08-27
1.6.1 / 2012-07-23
1.6.0 / 2012-07-23
1.5.0 / 2012-07-19
1.4.0 / 2012-06-04
1.3.1 / 2012-05-15
1.3.0 / 2012-05-08
1.2.2 / 2012-04-28
1.2.1 / 2012-04-11
1.2.0 / 2012-04-11
1.1.1 / 2012-03-30
1.1.0 / 2012-03-30
1.0.0 / 2012-03-29
Manifest
README
Puma: A Ruby Web Server Built For Concurrency
Description
Built For Speed & Concurrency
Quick Start
Plugins
API
Advanced Setup
Sinatra
Rails
Rackup
Configuration
Thread Pool
Clustered mode
Error handler for low-level errors
Binding TCP / Sockets
Control/Status Server
Configuration file
Restart
Normal vs Hot vs Phased Restart
Puma Signals
Release Directory
Cleanup Code
Platform Constraints
pumactl
Process Monitors
Capistrano deployment
Contributing
License
nginx
Nginx configuration example file
signals
Sending Signals
Puma Signals
systemd
systemd
Uncomment for socket activation (see below)
Requires=puma.socket
Foreground process (do not use –daemon in ExecStart or config.rb)
Preferably configure a non-privileged user
User=
Specify the path to your puma application root
WorkingDirectory=
Helpful for debugging socket activation, etc.
Environment=PUMA_DEBUG=1
The command to start Puma
Here we are using a binstub generated via:
bundle binstubs puma –path ./sbin
in the WorkingDirectory (replace <WD> below)
You can alternatively use bundle exec –keep-file-descriptors puma
ExecStart=<WD>/sbin/puma -b tcp://0.0.0.0:9292 -b ssl://0.0.0.0:9293?key=key.pem&cert=cert.pem
Alternatively with a config file (in WorkingDirectory) and
comparable bind directives
ExecStart=<WD>/sbin/puma -C config.rb
Socket Activation
AF_UNIX domain socket
SocketUser, SocketGroup, etc. may be needed for Unix domain sockets
ListenStream=/run/puma.sock
Socket options matching Puma defaults
Usage
After installing or making changes to puma.service
Enable so it starts on boot
Initial start up.
Check status
A normal restart. Warning: listeners sockets will be closed
while a new puma process initializes.
After installing or making changes to either puma.socket or
puma.service.
Enable both socket and service so they start on boot. Alternatively
you could leave puma.service disabled and systemd will start it on
first use (with startup lag on first request)
Initial start up. The Requires directive (see above) ensures the
socket is started before the service.
Check status of both socket and service.
A “hot” restart, with systemd keeping puma.socket listening and
providing to the new puma (master) instance.
A normal restart, needed to handle changes to
puma.socket, such as changing the ListenStream ports. Note
daemon-reload (above) should be run first.
README
Puma as a service
Init.d
Upstart
README
Puma daemon service
Installation
Managing the jungle
Assumptions
README
Puma as a service using Upstart
Installation
Managing the jungle
Logs
Conventions
Here's what a minimal app's config file should have
Before starting…
Classes/Modules
IO
IO::WaitReadable
Object
OpenSSL
OpenSSL::SSL
OpenSSL::SSL::SSLServer
Process
Puma
Puma::App
Puma::App::Status
Puma::Binder
Puma::CLI
Puma::Client
Puma::Cluster
Puma::Cluster::Worker
Puma::CommonLogger
Puma::ConfigDefault
Puma::Configuration
Puma::Configuration::ConfigMiddleware
Puma::ConnectionError
Puma::Const
Puma::ControlCLI
Puma::DSL
Puma::Delegation
Puma::Events
Puma::Events::DefaultFormatter
Puma::Events::PidFormatter
Puma::IOBuffer
Puma::JRubyRestart
Puma::JavaIOBuffer
Puma::Launcher
Puma::LeveledOptions
Puma::MiniSSL
Puma::MiniSSL::Context
Puma::MiniSSL::SSLError
Puma::MiniSSL::Server
Puma::MiniSSL::Socket
Puma::NullIO
Puma::Plugin
Puma::PluginLoader
Puma::PluginRegistry
Puma::Rack
Puma::Rack::Builder
Puma::Rack::Options
Puma::Rack::URLMap
Puma::Reactor
Puma::Runner
Puma::Server
Puma::Single
Puma::StateFile
Puma::TCPLogger
Puma::ThreadPool
Puma::ThreadPool::AutoTrim
Puma::ThreadPool::ForceShutdown
Puma::ThreadPool::Reaper
Puma::UnknownPlugin
Puma::UnsupportedOption
Puma::Util
Puma::Util::HeaderHash
Rack
Rack::Handler
Rack::Handler::Puma
String
Methods
::app — Puma::Rack::Builder
::chdir_exec — Puma::JRubyRestart
::check — Puma::MiniSSL
::clean_thread_locals — Puma::ThreadPool
::create — Puma::Plugin
::daemon — Process
::daemon? — Puma::JRubyRestart
::daemon_init — Puma::JRubyRestart
::daemon_start — Puma::JRubyRestart
::default — Rack::Handler
::extract_name — Puma::Plugin
::from_file — Puma::Configuration
::jruby? — Puma
::load — Puma::DSL
::new — Puma::ThreadPool::AutoTrim
::new — Puma::ControlCLI
::new — Puma::Configuration::ConfigMiddleware
::new — Puma::CLI
::new — Puma::DSL
::new — Puma::Util::HeaderHash
::new — Puma::Util::HeaderHash
::new — Puma::Client
::new — Puma::ThreadPool::Reaper
::new — Puma::Cluster::Worker
::new — Puma::Binder
::new — Puma::ThreadPool
::new — Puma::TCPLogger
::new — Puma::StateFile
::new — Puma::CommonLogger
::new — Puma::Server
::new — Puma::Runner
::new — Puma::Reactor
::new — Puma::Rack::URLMap
::new — Puma::Configuration
::new — Puma::Rack::Builder
::new — Puma::MiniSSL::Socket
::new — Puma::Events
::new — Puma::Plugin
::new — Puma::LeveledOptions
::new — Puma::App::Status
::new — Puma::PluginRegistry
::new — Puma::Cluster
::new — Puma::PluginLoader
::new — Puma::IOBuffer
::new — Puma::Launcher
::new — Puma::MiniSSL::Server
::new_from_string — Puma::Rack::Builder
::null — Puma::Events
::parse_file — Puma::Rack::Builder
::perm_daemonize — Puma::JRubyRestart
::random_token — Puma::Configuration
::run — Puma
::run — Rack::Handler::Puma
::stdio — Puma::Events
::strings — Puma::Events
::temp_path — Puma::Configuration
::unescape — Puma::Util
::valid_options — Rack::Handler::Puma
::windows? — Puma
#<< — Puma::IOBuffer
#[] — Puma::LeveledOptions
#[] — Puma::Util::HeaderHash
#[]= — Puma::Util::HeaderHash
#[]= — Puma::LeveledOptions
#_ary — Puma::DSL
#_load_from — Puma::DSL
#_offer_plugins — Puma::DSL
#_run — Puma::DSL
#accept — Puma::MiniSSL::Server
#accept_nonblock — Puma::MiniSSL::Server
#accept_nonblock — OpenSSL::SSL::SSLServer
#activate_control_app — Puma::DSL
#add — Puma::Reactor
#add_background — Puma::PluginRegistry
#add_ssl_listener — Puma::Binder
#add_tcp_listener — Puma::Binder
#add_unix_listener — Puma::Binder
#after_worker_boot — Puma::DSL
#after_worker_fork — Puma::DSL
#all_of — Puma::LeveledOptions
#all_workers_booted? — Puma::Cluster
#app — Puma::DSL
#app — Puma::Configuration
#app — Puma::Runner
#app_configured? — Puma::Configuration
#append — Puma::IOBuffer
#authenticate — Puma::App::Status
#backlog — Puma::Server
#backlog — Puma::ThreadPool
#before_fork — Puma::DSL
#before_restart — Puma::Runner
#bind — Puma::DSL
#boot! — Puma::Cluster::Worker
#booted? — Puma::Cluster::Worker
#byteslice — String
#ca= — Puma::MiniSSL::Context
#calculate_sleep — Puma::Reactor
#call — Puma::Client
#call — Puma::Rack::Builder
#call — Puma::Configuration::ConfigMiddleware
#call — Puma::Events::DefaultFormatter
#call — Puma::App::Status
#call — Puma::Events::PidFormatter
#call — Puma::CommonLogger
#call — Puma::Rack::URLMap
#call — Puma::TCPLogger
#capacity — Puma::IOBuffer
#casecmp? — Puma::Rack::URLMap
#cert= — Puma::MiniSSL::Context
#check — Puma::MiniSSL::Context
#check_workers — Puma::Cluster
#clamp — Puma::Configuration
#clean_thread_locals — Puma::DSL
#clear! — Puma::Reactor
#close — Puma::MiniSSL::Server
#close — Puma::NullIO
#close — Puma::Binder
#close — Puma::Client
#close — Puma::MiniSSL::Socket
#close_binder_listeners — Puma::Launcher
#clustered? — Puma::Launcher
#configure — Puma::Configuration
#connected_port — Puma::Launcher
#cork_socket — Puma::Server
#create — Puma::PluginLoader
#daemon? — Puma::Runner
#daemonize — Puma::DSL
#dead! — Puma::Cluster::Worker
#dead? — Puma::Cluster::Worker
#debug — Puma::Events
#debug — Puma::Runner
#debug — Puma::DSL
#decode_chunk — Puma::Client
#default_options — Puma::Configuration
#delete — Puma::Util::HeaderHash
#delete_pidfile — Puma::Launcher
#development? — Puma::Runner
#directory — Puma::DSL
#drain_on_shutdown — Puma::DSL
#each — Puma::Util::HeaderHash
#each — Puma::NullIO
#eagerly_finish — Puma::Client
#engine_read_all — Puma::MiniSSL::Socket
#env — Puma::Binder
#environment — Puma::Launcher
#environment — Puma::DSL
#environment — Puma::Configuration
#error — Puma::Runner
#error — Puma::Events
#explain — Puma::LeveledOptions
#extract_content_length — Puma::CommonLogger
#fetch — Puma::LeveledOptions
#find — Puma::PluginRegistry
#finish — Puma::Client
#fire — Puma::Events
#fire_background — Puma::PluginRegistry
#fire_on_booted! — Puma::Events
#fire_starts — Puma::PluginLoader
#flatten — Puma::Configuration
#flatten — Puma::LeveledOptions
#flatten! — Puma::Configuration
#flush — Puma::MiniSSL::Socket
#force_defaults — Puma::LeveledOptions
#force_shutdown_after — Puma::DSL
#format — Puma::Events
#forward — Puma::Delegation
#generate_map — Puma::Rack::Builder
#generate_restart_data — Puma::Launcher
#get — Puma::DSL
#gets — Puma::NullIO
#graceful_stop — Puma::Launcher
#halt — Puma::Single
#halt — Puma::Cluster
#halt — Puma::Launcher
#handle_servers — Puma::Server
#handle_servers_lopez_mode — Puma::Server
#handler_opts — Puma::Rack::Options
#has_key? — Puma::Util::HeaderHash
#hup — Puma::Cluster::Worker
#import — Puma::DSL
#import_from_env — Puma::Binder
#in_background — Puma::Plugin
#in_data_phase — Puma::Client
#include? — Puma::Util::HeaderHash
#infer_tag — Puma::Configuration
#inherit_binder — Puma::Server
#inherit_ssl_listener — Puma::Binder
#inherit_tcp_listener — Puma::Binder
#inherit_unix_listener — Puma::Binder
#initialize_copy — Puma::LeveledOptions
#initialize_copy — Puma::Configuration
#inject — Puma::DSL
#inspect — Puma::Client
#jruby_daemon? — Puma::Single
#jruby_daemon_start — Puma::Single
#jruby_start_try_to_finish — Puma::Client
#key= — Puma::MiniSSL::Context
#key? — Puma::Util::HeaderHash
#key? — Puma::LeveledOptions
#keystore= — Puma::MiniSSL::Context
#kill — Puma::Cluster::Worker
#load — Puma::StateFile
#load — Puma::Configuration
#load — Puma::DSL
#load_and_bind — Puma::Runner
#load_plugin — Puma::Configuration
#load_rackup — Puma::Configuration
#localhost_addresses — Puma::Binder
#log — Puma::Runner
#log — Puma::TCPLogger
#log — Puma::CommonLogger
#log — Puma::Launcher
#log — Puma::Events
#log_hijacking — Puma::CommonLogger
#log_requests — Puma::DSL
#lowlevel_error_handler — Puma::DSL
#map — Puma::Rack::Builder
#member? — Puma::Util::HeaderHash
#merge — Puma::Util::HeaderHash
#merge! — Puma::LeveledOptions
#merge! — Puma::Util::HeaderHash
#message — Puma::ControlCLI
#next_worker_index — Puma::Cluster
#on_booted — Puma::Events
#on_restart — Puma::DSL
#on_worker_boot — Puma::DSL
#on_worker_fork — Puma::DSL
#on_worker_shutdown — Puma::DSL
#output_header — Puma::Runner
#parse — Puma::Binder
#parse! — Puma::Rack::Options
#parse_error — Puma::Events
#parse_query — Puma::Util
#peeraddr — Puma::MiniSSL::Socket
#peercert — Puma::MiniSSL::Socket
#peerip — Puma::Client
#persistent_timeout — Puma::DSL
#phased_restart — Puma::Launcher
#phased_restart — Puma::Cluster
#pidfile — Puma::DSL
#ping! — Puma::Cluster::Worker
#ping_timeout? — Puma::Cluster::Worker
#pipe — Puma::Util
#plugin — Puma::DSL
#port — Puma::DSL
#preload? — Puma::Cluster
#preload_app! — Puma::DSL
#prepare_configuration — Puma::ControlCLI
#prune_bundler — Puma::DSL
#prune_bundler — Puma::Launcher
#prune_bundler? — Puma::Launcher
#puts — Puma::NullIO
#queue_requests — Puma::DSL
#quiet — Puma::DSL
#rack_builder — Puma::Configuration
#rack_response — Puma::App::Status
#rackup — Puma::Configuration
#rackup — Puma::DSL
#read — Puma::NullIO
#read_body — Puma::Client
#read_chunked_body — Puma::Client
#read_nonblock — Puma::MiniSSL::Socket
#readpartial — Puma::MiniSSL::Socket
#redirect_io — Puma::Cluster
#redirect_io — Puma::Runner
#redirected_io? — Puma::Runner
#register — Puma::Events
#register — Puma::PluginRegistry
#reload_worker_directory — Puma::Launcher
#reload_worker_directory — Puma::Cluster
#remap — Puma::Rack::URLMap
#replace — Puma::Util::HeaderHash
#reset — Puma::Client
#reset — Puma::IOBuffer
#restart — Puma::Cluster
#restart — Puma::Launcher
#restart — Puma::Single
#restart! — Puma::Launcher
#restart_args — Puma::Launcher
#restart_command — Puma::DSL
#rewind — Puma::NullIO
#ruby_engine — Puma::Runner
#run — Puma::Launcher
#run — Puma::CLI
#run — Puma::Rack::Builder
#run — Puma::Cluster
#run — Puma::Server
#run — Puma::Reactor
#run — Puma::Single
#run — Puma::ControlCLI
#run_hooks — Puma::Configuration
#run_in_thread — Puma::Reactor
#run_internal — Puma::Reactor
#run_lopez_mode — Puma::Server
#running — Puma::Server
#save — Puma::StateFile
#send_request — Puma::ControlCLI
#send_signal — Puma::ControlCLI
#set_process_title — Puma::Launcher
#set_rack_environment — Puma::Launcher
#set_remote_address — Puma::DSL
#set_timeout — Puma::Client
#setup_body — Puma::Client
#setup_chunked_body — Puma::Client
#setup_options — Puma::CLI
#setup_signals — Puma::Launcher
#setup_signals — Puma::Cluster
#shift — Puma::LeveledOptions
#shutdown — Puma::Reactor
#shutdown_debug — Puma::DSL
#size — Puma::NullIO
#spawn_workers — Puma::Cluster
#ssl_bind — Puma::DSL
#ssl_error — Puma::Events
#start — Puma::ControlCLI
#start — Object
#start! — Puma::ThreadPool::Reaper
#start! — Puma::ThreadPool::AutoTrim
#start_control — Puma::Runner
#start_phased_restart — Puma::Cluster
#start_server — Puma::Runner
#state_path — Puma::DSL
#stats — Puma::Cluster
#stats — Puma::Launcher
#stats — Puma::Single
#stdout_redirect — Puma::DSL
#stop — Puma::Launcher
#stop — Puma::ThreadPool::Reaper
#stop — Puma::ThreadPool::AutoTrim
#stop — Puma::Single
#stop — Puma::Cluster
#stop_blocked — Puma::Single
#stop_blocked — Puma::Cluster
#stop_workers — Puma::Cluster
#sync= — Puma::NullIO
#syswrite — Puma::MiniSSL::Socket
#tag — Puma::DSL
#tcp_mode — Puma::DSL
#tcp_mode! — Puma::Server
#tcp_mode! — Puma::DSL
#term — Puma::Cluster::Worker
#threads — Puma::DSL
#title — Puma::Launcher
#to_app — Puma::Rack::Builder
#to_hash — Puma::Util::HeaderHash
#to_io — Puma::MiniSSL::Server
#to_io — Puma::MiniSSL::Socket
#to_s — Puma::IOBuffer
#to_str — Puma::IOBuffer
#try_to_finish — Puma::Client
#uncork_socket — Puma::Server
#unescape — Puma::Util
#unknown_error — Puma::Events
#unsupported — Puma::Launcher
#unsupported — Puma::CLI
#use — Puma::Rack::Builder
#used — Puma::IOBuffer
#wakeup! — Puma::Cluster
#warmup — Puma::Rack::Builder
#worker — Puma::Cluster
#worker_boot_timeout — Puma::DSL
#worker_directory — Puma::DSL
#worker_shutdown_timeout — Puma::DSL
#worker_timeout — Puma::DSL
#workers — Puma::DSL
#workers_supported? — Puma::Plugin
#write — Puma::MiniSSL::Socket
#write — Puma::NullIO
#write — Puma::Events
#write_400 — Puma::Client
#write_408 — Puma::Client
#write_500 — Puma::Client
#write_pid — Puma::Launcher
#write_state — Puma::Launcher