I have a very simple Ruby application which uses Thin and Bundler that I need to stick on an Ubuntu box.
I've got as far as getting Ruby, bundler etc installed on the server, but am having trouble running the application itself.
Essentially I need a nice way of starting, stopping and restarting the application via capistrano.
My init.d script looks pretty much like this:
DAEMON=/home/ubuntu/apps/my_app/shared/bundle/ruby/1.8/bin/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
cd /home/ubuntu/apps/my_app/current && bundle exec thin start -d -C /etc/thin/my_app.yml
;;
stop)
cd /home/ubuntu/apps/my_app/current && bundle exec thin stop -d -C /etc/thin/my_app.yml
;;
restart)
cd /home/ubuntu/apps/my_app/current && bundle exec thin restart -d -C /etc/thin/my_app.yml
;;
*)
echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
exit 3
;;
esac
This results in:
/home/ubuntu/apps/my_app/shared/bundle/ruby/1.8/gems/thin-1.3.1/lib/thin/daemonizing.rb:51:in `daemonize': uninitialized constant Thin::Daemonizable::Daemonize (NameError)
Running sudo bundle exec thin start
from the application root on the server works just fine (although not as a daemon).
Therefore, how can I set this application up so that it'll start up as a daemon and be controllable via an init.d script / monit etc?
You could create binstubs. using these the init-script should be like any other. thin just needs --damonize as parameter if you do not specify it in your thin.yaml. With
thin install
thin generates an init-script for youhttp://gembundler.com/man/bundle-exec.1.html
Based on these features this works for me: