Skip to content

Commit

Permalink
Merge branch 'master' into schneems/puma-stats
Browse files Browse the repository at this point in the history
  • Loading branch information
schneems committed Mar 20, 2018
2 parents 1e69dac + 9eb3136 commit ad6a322
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ branches:
only:
- "master"
rvm:
- 2.2.9
- 2.2.8
- 2.3.6
- 2.4.3
- 2.5.0
Expand Down
10 changes: 10 additions & 0 deletions docs/systemd.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,16 @@ for additional configuration details.
Note that the above configurations will work with Puma in either
single process or cluster mode.

### Sockets and symlinks

When using releases folders, you should set the socket path using the
shared folder path (ex. `/srv/projet/shared/tmp/puma.sock`), not the
release folder path (`/srv/projet/releases/1234/tmp/puma.sock`).

Puma will detect the release path socket as different than the one provided by
systemd and attempt to bind it again, resulting in the exception
`There is already a server bound to:`.

## Usage

Without socket activation, use `systemctl` as root (e.g. via `sudo`) as
Expand Down
4 changes: 4 additions & 0 deletions tools/jungle/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ See `/tools/jungle/upstart` for Ubuntu's upstart scripts.
## Systemd

See [/docs/systemd](https://github.com/puma/puma/blob/master/docs/systemd.md).

## rc.d

See `/tools/jungle/rc.d` for FreeBSD's rc.d scripts
74 changes: 74 additions & 0 deletions tools/jungle/rc.d/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# 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

# Copy the puma script to the rc.d directory (make sure everyone has read/execute perms)
sudo cp puma /usr/local/etc/rc.d/

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

# Enable the puma service
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

```
{
"servers" : [
{
"dir": "/path/to/rails/project",
"user": "deploy-user",
"ruby_version": "ruby.version",
"ruby_env": "rbenv"
}
]
}
```

## 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.
61 changes: 61 additions & 0 deletions tools/jungle/rc.d/puma
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/sh
#

# PROVIDE: puma

. /etc/rc.subr

name="puma"
start_cmd="puma_start"
stop_cmd="puma_stop"
restart_cmd="puma_restart"
rcvar=puma_enable
required_files=/usr/local/etc/puma.conf

puma_start()
{
server_count=$(/usr/local/bin/jq ".servers[] .ruby_env" /usr/local/etc/puma.conf | wc -l)
i=0
while [ "$i" -lt "$server_count" ]; do
rb_env=$(/usr/local/bin/jq -r ".servers[$i].ruby_env" /usr/local/etc/puma.conf)
dir=$(/usr/local/bin/jq -r ".servers[$i].dir" /usr/local/etc/puma.conf)
user=$(/usr/local/bin/jq -r ".servers[$i].user" /usr/local/etc/puma.conf)
rb_ver=$(/usr/local/bin/jq -r ".servers[$i].ruby_version" /usr/local/etc/puma.conf)
case $rb_env in
"rbenv")
su - $user -c "cd $dir && rbenv shell $rb_ver && bundle exec puma -C $dir/config/puma.rb -d"
;;
*)
;;
esac
i=$(( i + 1 ))
done
}

puma_stop()
{
pkill ruby
}

puma_restart()
{
server_count=$(/usr/local/bin/jq ".servers[] .ruby_env" /usr/local/etc/puma.conf | wc -l)
i=0
while [ "$i" -lt "$server_count" ]; do
rb_env=$(/usr/local/bin/jq -r ".servers[$i].ruby_env" /usr/local/etc/puma.conf)
dir=$(/usr/local/bin/jq -r ".servers[$i].dir" /usr/local/etc/puma.conf)
user=$(/usr/local/bin/jq -r ".servers[$i].user" /usr/local/etc/puma.conf)
rb_ver=$(/usr/local/bin/jq -r ".servers[$i].ruby_version" /usr/local/etc/puma.conf)
case $rb_env in
"rbenv")
su - $user -c "cd $dir && pkill ruby && rbenv shell $ruby_version && bundle exec puma -C $dir/config/puma.rb -d"
;;
*)
;;
esac
i=$(( i + 1 ))
done
}

load_rc_config $name
run_rc_command "$1"
10 changes: 10 additions & 0 deletions tools/jungle/rc.d/puma.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"servers" : [
{
"dir": "/path/to/rails/project",
"user": "deploy-user",
"ruby_version": "ruby.version",
"ruby_env": "rbenv"
}
]
}

0 comments on commit ad6a322

Please sign in to comment.