Commit 7ef5d80
Changed files (6)
recipes/puma.rb
@@ -0,0 +1,13 @@
+configuration = node['puma']
+
+template "/etc/init.d/puma" do
+ source "puma.erb"
+ owner configuration['username']
+ group configuration['username']
+ mode "0744"
+ variables(configuration)
+end
+
+service "puma" do
+ action [:enable, :start]
+end if File.exists?("#{configuration['current_path']}/Gemfile")
recipes/rails.rb
@@ -1,7 +1,7 @@
include_recipe "mokhan-myface::rbenv"
include_recipe "mokhan-myface::capistrano"
include_recipe "mokhan-myface::nginx"
-include_recipe "mokhan-myface::unicorn"
+include_recipe "mokhan-myface::puma"
include_recipe "mokhan-myface::nodejs"
[
spec/puma_spec.rb
@@ -0,0 +1,37 @@
+describe "mokhan-myface::puma" do
+ subject do
+ ChefSpec::SoloRunner.new do |node|
+ node.set['puma'] = configuration
+ end.converge(described_recipe)
+ end
+
+ let(:username) { FFaker::Internet.user_name }
+ let(:configuration) do
+ {
+ username: username,
+ current_path: '/tmp',
+ }
+ end
+
+ it 'creates the puma init.d script' do
+ expect(subject).to create_template("/etc/init.d/puma")
+ .with_source("puma.erb")
+ .with_owner(username)
+ .with_group(username)
+ .with_mode("0744")
+ end
+
+ context "when the app is deployed" do
+ before :each do
+ FileUtils.touch('/tmp/Gemfile')
+ end
+
+ after :each do
+ FileUtils.rm('/tmp/Gemfile')
+ end
+
+ it 'starts the puma service' do
+ expect(subject).to start_service("puma")
+ end
+ end
+end
templates/default/puma.erb
@@ -0,0 +1,92 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: puma
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start puma at boot time
+# Description: Run input app server
+### END INIT INFO
+set -e
+
+TIMEOUT=${TIMEOUT-60}
+APP_ROOT=<%= @current_path %>
+PID=$APP_ROOT/tmp/pids/puma.pid
+ENVIRONMENT=<%= @rails_env %>
+CMD="cd $APP_ROOT; bin/puma -C config/puma_production.rb"
+action="$1"
+set -u
+
+old_pid="$PID.oldbin"
+
+cd $APP_ROOT || exit 1
+
+sig () {
+ test -s "$PID" && kill -$1 `cat $PID`
+}
+
+oldsig () {
+ test -s $old_pid && kill -$1 `cat $old_pid`
+}
+
+workersig () {
+ workerpid="$APP_ROOT/tmp/pids/unicorn.$2.pid"
+ test -s "$workerpid" && kill -$1 `cat $workerpid`
+}
+
+case $action in
+status )
+ sig 0 && echo >&2 "unicorn is running." && exit 0
+ echo >&2 "unicorn is not running." && exit 1
+ ;;
+start)
+ sig 0 && echo >&2 "Already running" && exit 0
+ eval "$CMD"
+ ;;
+stop)
+ sig QUIT && exit 0
+ echo >&2 "Not running"
+ ;;
+force-stop)
+ sig TERM && exit 0
+ echo >&2 "Not running"
+ ;;
+restart|reload)
+ sig HUP && echo reloaded OK && exit 0
+ echo >&2 "Couldn't reload, starting '$CMD' instead"
+ eval "$CMD"
+ ;;
+upgrade)
+ if sig USR2 && sleep 20 && sig 0 && oldsig QUIT
+ then
+ n=$TIMEOUT
+ while test -s $old_pid && test $n -ge 0
+ do
+ printf '.' && sleep 1 && n=$(( $n - 1 ))
+ done
+ echo
+
+ if test $n -lt 0 && test -s $old_pid
+ then
+ echo >&2 "$old_pid still exists after $TIMEOUT seconds"
+ exit 1
+ fi
+ exit 0
+ fi
+ echo >&2 "Couldn't upgrade, starting '$CMD' instead"
+ eval "$CMD"
+ ;;
+kill_worker)
+ workersig QUIT $2 && exit 0
+ echo >&2 "Worker not running"
+ ;;
+
+reopen-logs)
+ sig USR1
+ ;;
+*)
+ echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
+ exit 1
+ ;;
+esac
templates/default/unicorn.erb
@@ -17,8 +17,7 @@ TIMEOUT=${TIMEOUT-60}
APP_ROOT=<%= @current_path %>
PID=$APP_ROOT/tmp/pids/unicorn.pid
ENVIRONMENT=<%= @rails_env %>
-#CMD="cd $APP_ROOT; bin/unicorn -E $ENVIRONMENT -D -c $APP_ROOT/config/unicorn.rb"
-CMD="cd $APP_ROOT; bin/foreman start -e .env.production"
+CMD="cd $APP_ROOT; bin/unicorn -E $ENVIRONMENT -D -c $APP_ROOT/config/unicorn.rb"
action="$1"
set -u
.kitchen.yml
@@ -50,7 +50,7 @@ suites:
app_secret_key: 'secret-key'
nginx:
domain: 'www.mokhan.ca'
- unicorn:
+ puma:
username: 'rails'
current_path: '/var/www/app/current'
postgres: