Задача
Необходимо настроить автозапуск
RoR-приложения с веб-сервером
thin при старте системы [
Debian], осложняющими задачу факторами является: запуск из-под определённого пользователя, у которого
Ruby & RoR установлены из-под юзерской инсталляции
RVM, а само RoR-приложение установленно в определённом gemset.
Решение
Переходим в каталог приложения и выполняем следующие команды:
$ rvmsudo thin install
$ rvmsudo update-rc.d -f thin defaults
# sudo thin config -C /etc/thin/APPNAME.yml -c /PATH/TO/ROR/APP --servers N -e production
$ rvm wrapper RUBYVERSION@GEMSET bootup thin
Вышеприведённые команды выполняют следуещее:
- создаёт /etc/thin и /etc/init.d/thin;
- устанавливает дефолтные ссылки сценариев инициализации;
- устанавливает настройки thin для приложения (в данном случае — production, N серверов) в файл /etc/thin/APPNAME.yml;
- создаёт враппер для запуска thin с определённым для приложения гемсетом.
Правим файлик /etc/init.d/thin, чтобы thin запускался с соответсвующим враппером, меняем строку
DAEMON=/usr/local/rvm/gems/ruby-VERSION-VERSION@GEMSET/bin/thin
на
DAEMON=/home/USER/.rvm/bin/bootup_thin
После выполненных действий приложение уже автоматически запускается, но с правами root, чтобы сменить рута на пользователя RVM опять правим /etc/init.d/thin, модифицируя строки запуска/останова/рестарта в таком духе
$DAEMON start --all $CONFIG_PATH
на
su RVMUSER -c "$DAEMON start --all $CONFIG_PATH"
Готовый файл /etc/init.d/thin выглядит так:
DAEMON=/home/rubyworker/.rvm/bin/bootup_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)
su rubyworker -c "$DAEMON start --all $CONFIG_PATH"
;;
stop)
su rubyworker -c "$DAEMON stop --all $CONFIG_PATH"
;;
restart)
su rubyworker -c "$DAEMON restart --all $CONFIG_PATH"
;;
*)
echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
exit 3
;;
esac
:
Всё, теперь можно запускать/останавливать/перезапускать thin командой:
$ sudo service thin start|stop|restart
0 коммент.:
Отправить комментарий