我应该如何维护我的Puma应用程序服务器?

时间:2013-11-11 19:37:50

标签: ruby-on-rails ubuntu puma

我可以使用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

2 个答案:

答案 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