2013-11-11 2 views
3

Я могу успешно запустить приложение rails на своем сервере, используя Puma в качестве сервера приложений. Я начинаю Puma, как это:Как мне поддерживать сервер приложений Puma?

bundle exec puma -e production -b unix:///var/run/my_app.sock 

Это команда Unix, которая начинается пума в производственном режиме в указанном месте. Однако, если мне нужно перезагрузить vps, мне нужно будет пройти через все мои приложения и снова запустить эту команду, чтобы запустить сервер Puma для каждого приложения.

Каков наилучший способ сделать это? Я немного в нуб Ubuntu, но было бы лучше всего, чтобы быть этим:

Каждый раз, когда я устанавливаю новое приложение рельсы на моем VPS, я

sudo vi /etc/rc.local 

и добавить rc.local с команда? Так что rc.local выглядит примерно через некоторое время:

#!/bin/sh -e 
    # 
    # rc.local 
    # 

    bundle exec puma -e production -b unix:///var/run/app_1.sock 
    bundle exec puma -e production -b unix:///var/run/app_2.sock 
    bundle exec puma -e production -b unix:///var/run/app_3.sock 
    bundle exec puma -e production -b unix:///var/run/app_4.sock 
    bundle exec puma -e production -b unix:///var/run/app_5.sock 

    exit 0 
+0

Для Единорога я должен был написать [мой собственный сценарий инициализации] (https://gist.github.com/mdesantis/4740439), как и для [delayed_job ] (https://gist.github.com/mdesantis/5143647); вы можете посмотреть на них и вдохнуть вдохновение. Для Ubuntu/Debian шаблон сценария инициализации находится в '/ etc/init.d/skeleton', демоны управляются командой' service' и включаются/деактивируются при запуске командой 'update-rc.d'. Удачи :) – mdesantis

ответ

2

Ubuntu делает это очень сложно. Самое простое решение, которое я видел до сих пор, - это OpenBSD. Для того, чтобы убедиться, что ваши приложения начинают при перезагрузке, добавьте в ваш /etc/rc.conf.local:

pkg_scripts="myapp myapp2 myapp3" 

Каждое приложение понадобится скрипт запуска, как это (/etc/rc.d/myapp):

#!/bin/sh 

# OPENBSD PUMA STARTUP SCRIPT 

# Remember to `chmod +x` this file 

# http://www.openbsd.org/cgi-bin/cvsweb/ports/infrastructure/templates/rc.template?rev=1.5 

puma="/usr/local/bin/puma" 
pumactl="/usr/local/bin/pumactl" 
puma_state="-S /home/myapp/tmp/puma.state" 
puma_config="-C /home/myapp/config/puma.rb" 

. /etc/rc.d/rc.subr 

rc_start() { 
    ${rcexec} "${pumactl} ${puma_state} start ${puma_config}" 
} 

rc_reload() { 
    ${rcexec} "${pumactl} ${puma_state} restart ${puma_config}" 
} 

rc_stop() { 
    ${rcexec} "${pumactl} ${puma_state} stop" 
} 

rc_check() { 
    ${rcexec} "${pumactl} ${puma_state} status" 
} 

rc_cmd $1 

Тогда сделайте так:

% /etc/rc.d/myapp start 
% /etc/rc.d/myapp reload 
% /etc/rc.d/myapp stop 
% /etc/rc.d/myapp status 
+0

Каким образом Ubuntu делает это очень сложно? –

+0

Не начинать войну с ОС, но все так просто сложно. Возьмите стандартный сценарий запуска Puma, например: https://github.com/puma/puma/blob/master/tools/jungle/init.d/puma –

+0

Да, вы на месте. Я думаю, что Puma в среднем просто сложнее сделать работу должным образом. Мы использовали его в производстве около года и перешли к новому пассажиру. Довольно много нулевой конфигурации и нулевые проблемы. –

2

Ubuntu использует выскочку для управления услугами. Puma фактически предоставляет сценарии выскочки, которые делают невероятно легким сделать то, что вы хотите. Посмотрите на скрипты в их репо:

https://github.com/puma/puma/tree/master/tools/jungle/upstart

+0

'cd/home/deployer/apps/cpp/current && bundle exec pumactl start' прост, эти сценарии заставляют мои глаза оглядываться, но больше ничего не работает. Придется вздохнуть. – Epigene

Смежные вопросы