Назад | Перейти на главную страницу

Настройка Thin, Bundler и Ubuntu

У меня есть очень простое приложение Ruby, которое использует Thin и Bundler, которые мне нужно прикрепить к системе Ubuntu.

Мне удалось установить Ruby, бандлер и т. Д. На сервере, но у меня проблемы с запуском самого приложения.

По сути, мне нужен хороший способ запуска, остановки и перезапуска приложения через capistrano.

Мой сценарий init.d выглядит примерно так:

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

Это приводит к:

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

Бег sudo bundle exec thin start из корня приложения на сервере работает нормально (хотя и не как демон).

Следовательно, как я могу настроить это приложение, чтобы оно запускалось как демон и им можно было управлять с помощью сценария init.d / monit и т. Д.?

Вы можете создавать заглушки. при их использовании сценарий инициализации должен быть похож на любой другой. Если вы не укажете его в своем thin.yaml, для thin просто необходим параметр --damonize. С участием thin install thin генерирует для вас сценарий инициализации

УСТАНОВКА ПАКЕТА --BINSTUBS

Если вы используете флаг --binstubs в bundle install (1), Bundler автоматически создаст каталог (по умолчанию app_root / bin), содержащий все исполняемые файлы, доступные из гемов в пакете.

После использования --binstubs bin / rspec spec / my_spec.rb идентичен пакету exec rspec spec / my_spec.rb.

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

На основе этих функций это работает для меня:

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