3

我可以使用 Puma 作为应用程序服务器在我的服务器上成功运行 rails 应用程序。我这样开始 Puma:

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

这是一个在指定位置以生产模式启动 puma 的 unix 命令。但是,如果我需要重新启动我的 vps,我将需要遍历我的所有应用程序并一遍又一遍地运行该命令以启动每个应用程序的 Puma 服务器。

这样做的最佳方法是什么?我有点像 Ubuntu 菜鸟,但最好的方法是:

每次我在我的 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
4

2 回答 2

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
于 2014-04-09T17:15:24.203 回答
2

Ubuntu 使用 upstart 来管理服务。Puma 实际上提供了新贵脚本,使您可以非常轻松地做您想做的事。看看他们回购中的脚本:

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

于 2014-05-01T12:40:45.477 回答