我可以使用Puma作为应用程序服务器在我的服务器上成功运行rails应用程序。我这样开始彪马:
bundle exec puma -e production -b unix:///var/run/my_app.sock
这是一个unix命令,它在指定位置的生产模式下启动puma。但是,如果我需要重新启动我的vps,我需要遍历所有应用程序并反复运行该命令以启动每个应用程序的Puma服务器。
这样做的最佳方法是什么?我是一个Ubuntu noob,但最好的方法是:
每次在我的vps上安装新的rails应用程序时,我
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 :(得分: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
答案 1 :(得分:2)
Ubuntu使用upstart来管理服务。 Puma实际上提供了新手脚本,可以非常轻松地完成您想要的任务。看看他们的回购中的脚本:
https://github.com/puma/puma/tree/master/tools/jungle/upstart