Ich habe ein RubyOnRails 3 Projekt und ich verwende rvm. Ich möchte von einem Sysvinit-Skript zu Supervisord wechseln. Das sysvinit-Skript kann die Software nur im Falle eines Fehlers starten, wenn sie von $ etwas abgebrochen und neu gestartet wird. Meistens ich.Verwenden von Supervisord und Rvm zum Ausführen von Rubyonrails
Im Projektordner gibt es eine .ruby-version
und eine .ruby-gemset
Datei, so dass die korrekte Ruby Version und der Edelstein automatisch geladen werden. Dann ist die App startet mit einem Shell-Skript, das wie folgt aussieht:
#!/bin/bash
RAILS_ENV="production" rails server -d
Mein Init-Skript wie folgt aussieht und funktioniert neben dem Neustart und Anhalten:
#!/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
Mein Vorgesetzter Config sieht wie folgt aus:
[program:myapp]
directory=/home/myuser/myapp/
command=/home/myuser/.rvm/wrappers/[email protected]/rails server -d
environment=RAILS_ENV="production"
autostart=true
autorestart=true
Problem ist, dass es keine rails binary im Wrapper gibt. damit der Befehl fehlschlägt. Was ist der richtige Weg, dies zu tun? Ich habe keine Ideen mehr und würde anfangen, ein wirklich hässliches Bash-Skript zusammenzustellen, das den Job auf eine sehr falsche und schlechte Art und Weise erledigt, tut es aber. Übrigens habe ich im Gems-Ordner Schienen gefunden.
$ ls /home/myuser/.rvm/wrappers/[email protected]/
bundle bundler erb executable-hooks-uninstaller gem irb rake rdoc ri ruby testrb
$ which rails
/home/ffwi/.rvm/gems/[email protected]/bin/rails
Ich glaube, Sie brauchen einen Befehl wie: 'command=/home/myuser/.rvm/wrappers/[email protected]/bundle exec Schienen Server -d' – Glupo
Betreuer sagt [nicht daemonize] (http : //supervisord.org/subprocess.html#nondaemonizing-of-subprocesses) verwenden Sie daher nicht die '-d' Option auf' rails server' –