Configurando Thin, Bundler e Ubuntu

2

Eu tenho uma aplicação Ruby muito simples que usa Thin e Bundler que eu preciso colocar em uma caixa do Ubuntu.

Eu tenho até conseguir instalar Ruby, bundler etc instalado no servidor, mas estou tendo problemas para executar o aplicativo em si.

Essencialmente eu preciso de uma boa maneira de iniciar, parar e reiniciar o aplicativo via capistrano.

Meu script init.d se parece muito com isso:

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

Isso resulta em:

/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)

A execução de sudo bundle exec thin start da raiz do aplicativo no servidor funciona bem (embora não como um daemon).

Portanto, como posso configurar esse aplicativo para que ele seja iniciado como um daemon e possa ser controlado por meio de um script / script init.d?

    
por Neil Middleton 08.02.2012 / 12:00

1 resposta

2

Você pode criar binstubs. Usando estes, o script init deve ser como qualquer outro. thin apenas precisa --damonize como parâmetro se você não especificá-lo no seu thin.yaml. Com thin install thin gera um script de inicialização para você

BUNDLE INSTALL --BINSTUBS

If you use the --binstubs flag in bundle install(1), Bundler will automatically create a directory (which defaults to app_root/bin) containing all of the executables available from gems in the bundle.

After using --binstubs, bin/rspec spec/my_spec.rb is identical to bundle exec rspec spec/my_spec.rb.

link

Com base nesses recursos, isso funciona para mim:

bundle install --binstubs
./bin/thin install
/etc/init.d/thin start
    
por 08.02.2012 / 15:31