Настройка Thin, Bundler и Ubuntu
У меня есть очень простое приложение на Ruby, использующее Thin и Bundler, которое мне нужно наклеить на коробку Ubuntu.
Я установил Ruby, bundler и т. Д. На сервер, но у меня проблемы с запуском самого приложения.
По сути, мне нужен хороший способ запуска, остановки и перезапуска приложения через 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 и т. Д.?
1 ответ
Вы могли бы создать binstubs. с их помощью init-скрипт должен быть похож на любой другой. тонкий просто нуждается в параметре --damonize, если вы не указали его в файле thin.yaml. С thin install
thin создает для вас init-скрипт
BUNDLE УСТАНОВИТЬ --BINSTUBS
Если вы используете флаг --binstubs в комплекте установки (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