У меня есть очень простое приложение 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