Puma as a service using rc.d

Manage multilpe Puma servers as services on one box using FreeBSD’s rc.d service.

Dependencies

  • jq - a command-line json parser is needed to parse the json in the config file

Installation

  1. # Copy the puma script to the rc.d directory (make sure everyone has read/execute perms)
  2. sudo cp puma /usr/local/etc/rc.d/
  3. # Create an empty configuration file
  4. sudo touch /usr/local/etc/puma.conf
  5. # Enable the puma service
  6. sudo echo 'puma_enable="YES"' >> /etc/rc.conf

Managing the jungle

Puma apps are referenced in /usr/local/etc/puma.conf by default.

Start the jungle running:

service puma start

This script will run at boot time.

You can also stop the jungle (stops ALL puma instances) by running:

service puma stop

To restart the jungle:

service puma restart

Conventions

  • The script expects:
    • a config file to exist under config/puma.rb in your app. E.g.: /home/apps/my-app/config/puma.rb.

You can always change those defaults by editing the scripts.

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

  1. {
  2. "servers" : [
  3. {
  4. "dir": "/path/to/rails/project",
  5. "user": "deploy-user",
  6. "ruby_version": "ruby.version",
  7. "ruby_env": "rbenv"
  8. }
  9. ]
  10. }

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!
  • Set the directory of the app
  • Set the ruby version to execute
  • Set the ruby environment (currently set to rbenv, since that is the only ruby environment currently supported)
  • Add additional server instances following the scheme in the example

Notes:

Only rbenv is currently supported.