Commit 69e4455
Changed files (3)
recipes/unicorn.rb
@@ -0,0 +1,13 @@
+configuration = node['unicorn']
+
+template "/etc/init.d/unicorn" do
+ source "unicorn.erb"
+ owner configuration['username']
+ group configuration['username']
+ mode "0744"
+ variables(configuration)
+end
+
+service "unicorn" do
+ action [:enable, :start]
+end
spec/unicorn_spec.rb
@@ -0,0 +1,27 @@
+describe "mokhan-myface::unicorn" do
+ subject do
+ ChefSpec::SoloRunner.new do |node|
+ node.set['unicorn'] = unicorn_variables
+ end.converge(described_recipe)
+ end
+
+ let(:username) { FFaker::Internet.user_name }
+ let(:unicorn_variables) do
+ {
+ 'username' => username
+ }
+ end
+
+ it 'creates the unicorn init.d script' do
+ expect(subject).to create_template("/etc/init.d/unicorn")
+ .with_source("unicorn.erb")
+ .with_owner(username)
+ .with_group(username)
+ .with_mode("0744")
+ .with_variables(unicorn_variables)
+ end
+
+ it 'starts the unicorn service' do
+ expect(subject).to start_service("unicorn")
+ end
+end
templates/default/unicorn.erb
@@ -0,0 +1,95 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: unicorn
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start unicorn at boot time
+# Description: Run input app server
+### END INIT INFO
+set -e
+# Example init script, this can be used with nginx, too,
+# since nginx and unicorn accept the same signals
+
+# Feel free to change any of the following variables for your app:
+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"
+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