I wrote this shell script in config/thin_example.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh

set -e

# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/home/deployer/apps/example/current
PID=$APP_ROOT/tmp/pids/thin.pid
CMD="cd $APP_ROOT; bundle exec rackup -D -P $PID $APP_ROOT/config/faye.ru -s thin -E     production"
AS_USER=deployer
set -u

startme() {
    run "$CMD"
}

stopme() {
    run "pkill -f $PID"
}

run () {
  if [ "$(id -un)" = "$AS_USER" ]; then
    eval $1
  else
    su -c "$1" - $AS_USER
  fi
}

case "$1" in
    start)   startme ;;
    stop)    stopme ;;    
    restart) stopme; startme ;;
    *) echo "usage: $0 start|stop|restart" >&2
       exit 1
       ;;
esac

Loosely modified from the unicorn scripts that Ryan Bates used in his VPS deployment railscast (pro only).

Make it executable

1
$ chmod +x config/thin_example.sh

You'll need to symlink it to init.d (after chmod +x 'ing to make it executable)

1
$ sudo ln -nfs /home/deployer/apps/example/current/config/thin_example.sh /etc/init.d/thin_example

Then if you want it to startup with the server

sudo update-rc.d thin_example defaults Otherwise you should just be able to /etc/init.d/thin_example [start|stop|restart]. An important point to note is that I'm telling rackup to start in daemon mode (-D) and explicitly setting the PID so I can kill it later.