понедельник, 14 сентября 2015 г.

Хозяйке на заметку: Поднимаем ruby-приложение как демон внутри RVM используя systemd

Данный приём должен работать везде, где есть установленный systemd в качестве системы инициализации. Хитрость в том, что приложения установленные внутри RVM так просто запустить не выйдет, будет жаловаться на отсутствие в $PATH чего-нибудь, чаще всего ruby_executable_hooks.

Подсказкой послужила официальная документация RVM, описывающая как запустить Ruby-приложение используя стандартный init.d.

Для начала генерируем gemset:

Вместо ruby-2.1.2 указывайте ту версию, которая у вас будет использоваться в приложении, прописанная командой rvm use.

Далее собираем wrapper:

Где application — название вашего запускаемого приложения. Правда есть одна особенность, с которой я пока не разобрался. После генерации wrapper в содержимом /usr/local/rvm/wrappers/ruby-2.1.2@application почему-то нет бинарника bundler, но он есть в /usr/local/rvm/wrappers/default (вероятно, связано с тем, что у нас версия Ruby везде указана системной).

После чего пишем unit-файл для systemd:


Всё, теперь приложение будет доступно как обычный демон и им можно управлять с помощью systemd.

Комментариев нет:

Отправить комментарий