В настоящее время я нахожусь в процессе переноса некоторых функций Rails в некоторые микросервисы, я не буду утомлять вас причинами этого, достаточно сказать, что мы довольны решением и нашими архитектурными решениями.
На данный момент это не особенно сложно, работает несколько автономных скриптов, говорящих через rabbitMQ, все с несколькими гем-зависимостями (bunny, mysql2 и т. Д.), Когда я запускаю их через CLI, все прекрасно работает.
Моя проблема, и где я нуждаюсь в некотором совете, состоит в том, как перенести их в демоны, которые могут автоматически вызываться при неудаче.
Наша текущая платформа выглядит следующим образом:
Centos 6,5 (не спрашивайте)
RVM 2.5.1@somegemset
Nginx
пассажир
someuser
Для Rails я использую Capistrano с плагинами RVM и Bundler, и он запускается и забывает, все развертывается, если падает, перезапускается и мы уходим.
Первоначально я думал, что могу просто добавить каждый рубиновый микросервис в каталог init с помощью респауна. Но работа никогда не начнется.
Если я подключаюсь как другой пользователь (не пользователь rails), у меня возникают проблемы с gem / rvm. Поэтому я подумал, что это может быть проблема с путём, пытаясь решить её, я подумал, что мы можем потерять rvm и пойти с установкой пакета --binstubs.
Это работает из командной строки, например. service_directory / bin / bundle exec service.rb
но все еще не работает в init, они просто не запускаются, начиная со статуса 42 (?), Вот мой init init.
start on runlevel [2345]
stop on starting shutdown
respawn
exec /home/someuser/services/some-service/bin/bundle exec /home/someuser/services/some-service/lib/service.rb
Я пытался с помощью chdir держать его аккуратнее, но и без радости.
Я пытался использовать мастер, отлично работает с запуском мастера, но созданные сценарии экспорта выскочки не работают таким же образом.
Я пытался сделать их исполняемыми с оболочкой rvm ruby в качестве шебанга, сценарии включают
require 'rubygems'
require 'bundler/setup'
Я читал о monit, но, похоже, нужны pids, которые не создаются в моих скриптах.
Я уверен, что мне чего-то не хватает, поскольку должен быть простой способ позволить любому пользователю (включая пользователей root и системы) выполнить любой сценарий, найти драгоценные камни и запустить их.
Заранее спасибо.