Type Name Latest commit message Commit time
Failed to load latest commit information. Cleaned up README Mar 9, 2013
puma-manager.conf Fixed some typos in upstart scripts Jun 5, 2013
puma.conf Update reference to the instances management script Jul 11, 2016

Puma as a service using Upstart

Manage multiple Puma servers as services on the same box using Ubuntu upstart.


# Copy the scripts to services directory 
sudo cp puma.conf puma-manager.conf /etc/init

# Create an empty configuration file
sudo touch /etc/puma.conf

Managing the jungle

Puma apps are referenced in /etc/puma.conf by default. Add each app's path as a new line, e.g.:


Start the jungle running:

sudo start puma-manager

This script will run at boot time.

Start a single puma like this:

sudo start puma app=/path/to/app


Everything is logged by upstart, defaulting to /var/log/upstart.

Each puma instance is named after its directory, so for an app called /home/apps/my-app the log file would be /var/log/upstart/puma-_home_apps_my-app.log.


  • The script expects:
    • a config file to exist under config/puma.rb in your app. E.g.: /home/apps/my-app/config/puma.rb.
    • a temporary folder to put the PID, socket and state files to exist called tmp/puma. E.g.: /home/apps/my-app/tmp/puma. Puma will take care of the files for you.

You can always change those defaults by editing the scripts.

Here's what a minimal app's config file should have

pidfile "/path/to/app/tmp/puma/pid"
state_path "/path/to/app/tmp/puma/state"

Before starting...

You need to customise puma.conf to:

  • Set the right user your app should be running on unless you want root to execute it!
    • Look for setuid apps and setgid apps, uncomment those lines and replace apps to whatever your deployment user is.
    • Replace apps on the paths (or set the right paths to your user's home) everywhere else.
  • Uncomment the source lines for rbenv or rvm support unless you use a system wide installation of Ruby.