gpt4 book ai didi

ruby-on-rails - 使用 supervisord 和 rvm 运行 ruby​​onrails

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:28 25 4
gpt4 key购买 nike

我有一个 RubyOnRails 3 项目,我正在使用 rvm。我想从 sysvinit 脚本切换到 supervisord。 sysvinit 脚本只能在出现错误时启动软件,它会被 $something 杀死并重新启动。主要是我。

在项目文件夹中有一个 .ruby-version 和一个 .ruby-gemset 文件,以便自动加载正确的 ruby​​ 版本和 gemset。然后应用程序开始使用如下所示的 shell 脚本:

#!/bin/bash

RAILS_ENV="production" rails server -d

我的 init 脚本看起来像这样,除了重新启动和停止之外还可以工作:

#!/bin/sh
### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts myapp
# Description: starts the myapp software
### END INIT INFO

USER=myuser
PATH=$PATH
DAEMON=go.sh
DAEMON_OPTS=""
NAME=myapp
DESC="myapp for $USER"
PID=/home/$USER/myapp/tmp/pids/server.pid

case "$1" in
start)
CD_TO_APP_DIR="cd /home/$USER/myapp"
START_DAEMON_PROCESS="$DAEMON $DAEMON_OPTS"

echo -n "Starting $DESC: "
if [ $(whoami) = root ]; then
su - $USER -c "$CD_TO_APP_DIR > /dev/null 2>&1 && ./$START_DAEMON_PROCESS &"
else
$CD_TO_APP_DIR > /dev/null 2>&1 && ./$START_DAEMON_PROCESS &
fi
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
kill -QUIT `cat $PID`
echo "$NAME."
;;
restart)
echo -n "Restarting $DESC: "
kill -USR2 `cat $PID`
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
kill -HUP `cat $PID`
echo "$NAME."
;;
*)
echo "Usage: $NAME {start|stop|restart|reload}" >&2
exit 1
;;
esac

exit 0

我的主管配置如下所示:

[program:myapp]
directory=/home/myuser/myapp/
command=/home/myuser/.rvm/wrappers/ruby-2.1.5@myapp/rails server -d
environment=RAILS_ENV="production"
autostart=true
autorestart=true

问题是包装器中没有 rails 二进制文件。使命令失败。这样做的正确方法是什么?我没有想法,会开始将一些非常丑陋的 bash 脚本放在一起,以非常错误和糟糕的方式完成工作,但确实如此。顺便说一句,我在 gems 文件夹中找到了 rails。

$ ls /home/myuser/.rvm/wrappers/ruby-2.1.5@myapp/
bundle bundler erb executable-hooks-uninstaller gem irb rake rdoc ri ruby testrb
$ which rails
/home/ffwi/.rvm/gems/ruby-2.1.5@ffwi-extern/bin/rails

最佳答案

尝试在您的脚本中获取 rvm(这个 link 描述了像您这样的用例)。

您必须手动将 RVM 加载到脚本的 shell 中:

    source "$HOME/.rvm/scripts/rvm"

它只对交互式登录 shell 自动启用。

从现在开始,您可以cd 进入目录,rvm 应该开始工作了。

关于ruby-on-rails - 使用 supervisord 和 rvm 运行 ruby​​onrails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com