2 votes

Configuration de Thin, Bundler et Ubuntu

J'ai une application Ruby très simple qui utilise Thin et Bundler et que je dois installer sur une boîte Ubuntu.

J'ai réussi à installer Ruby, bundler, etc. sur le serveur, mais j'ai du mal à faire fonctionner l'application elle-même.

Essentiellement, j'ai besoin d'un moyen agréable de démarrer, d'arrêter et de redémarrer l'application via capistrano.

Mon init.d script ressemble à peu près à ça :

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

Cela se traduit par :

/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 depuis la racine de l'application sur le serveur fonctionne parfaitement (mais pas en tant que démon).

Par conséquent, comment puis-je configurer cette application pour qu'elle démarre comme un démon et soit contrôlable via un init.d script / monit etc ?

2voto

Sheila Points 61

Vous pouvez créer des binstubs. En utilisant ceux-ci, le script init-script devrait être comme n'importe quel autre. thin a juste besoin de --damonize comme paramètre si vous ne le spécifiez pas dans votre thin.yaml. Avec thin install thin génère un init-script pour vous

BUNDLE INSTALL --BINSTUBS

Si vous utilisez l'option --binstubs dans bundle install(1), Bundler va créera automatiquement un répertoire (par défaut app_root/bin) contenant tous les exécutables disponibles à partir des gems du bundle.

Après avoir utilisé --binstubs, bin/rspec spec/my_spec.rb est identique à bundle exec rspec spec/my_spec.rb.

http://gembundler.com/man/bundle-exec.1.html

Sur la base de ces caractéristiques, cela fonctionne pour moi :

bundle install --binstubs
./bin/thin install
/etc/init.d/thin start

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X