ruby on rails - proyecto - Ejecute automáticamente el servidor Faye cuando inicie el servidor Rails
rails s (4)
En Ubuntu, debe usar el sistema de inicio de los sistemas operativos - Upstart.
user@host:~$ cat /etc/init/faye.conf
description "Faye Upstart script"
start on startup
stop on shutdown
respawn
script
env RAILS_ENV=production
exec sudo -u deployuser -i /home/deployuser/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/bin/rackup /var/www/booko.com.au/booko/faye.ru -s thin -E production
end script
No estoy contento con el método de llamar a Ruby ya que cambiará. Pero las ventajas son que se iniciará cuando se inicie el sistema y reaparecerá si muere o si lo MATAS.
Deje que Upstart se encargue de demonizar un proceso y asegurarse de que siga funcionando.
Actualmente tengo a Faye trabajando con mi aplicación Rails 3.0.9. Sin embargo tengo dos pestañas separadas abiertas en mi terminal. Una para el servidor Faye, y otra para el servidor Rails. ¿Cómo puedo integrarlos y ejecutar automáticamente el servidor Faye cuando se inicia Rails?
Para iniciar el servidor Faye, estoy ejecutando:
rackup faye.ru -s thin -E production
faye.ru
require ''faye''
faye_server = Faye::RackAdapter.new(:mount => ''/faye'')
run faye_server
Por favor, hágamelo saber si necesita más información.
Escribí este script de shell en config / thin_example.sh
#!/bin/sh
set -e
# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/home/deployer/apps/example/current
PID=$APP_ROOT/tmp/pids/thin.pid
CMD="cd $APP_ROOT; bundle exec rackup -D -P $PID $APP_ROOT/config/faye.ru -s thin -E production"
AS_USER=deployer
set -u
startme() {
run "$CMD"
}
stopme() {
run "pkill -f $PID"
}
run () {
if [ "$(id -un)" = "$AS_USER" ]; then
eval $1
else
su -c "$1" - $AS_USER
fi
}
case "$1" in
start) startme ;;
stop) stopme ;;
restart) stopme; startme ;;
*) echo "usage: $0 start|stop|restart" >&2
exit 1
;;
esac
Modificado libremente de las secuencias de comandos de unicornio que Ryan Bates utilizó en su despliegue de VPS (solo para profesionales) .
Hazlo ejecutable
chmod +x config/thin_example.sh
Necesitará un enlace simbólico a init.d (después de chmod + x ''ing para hacerlo ejecutable)
sudo ln -nfs /home/deployer/apps/example/current/config/thin_example.sh /etc/init.d/thin_example
Entonces si quieres que se inicie con el servidor.
sudo update-rc.d thin_example defaults
De lo contrario, debería poder /etc/init.d/thin_example [start|stop|restart]
. Un punto importante que se debe tener en cuenta es que le estoy diciendo a un acumulador que comience en modo daemon (-D) y que configure explícitamente el PID para poder eliminarlo más tarde.
Hoy en día, solo uso Foreman para esto: https://github.com/ddollar/foreman
Al crear un Procfile, puede especificar qué demonios deben ejecutarse (con control de cuántos de cada uno de los que desea), y mantiene todo en una ventana de terminal (con una excelente codificación de colores de cada proceso). Incluso puede exportar a scripts upstart o init.d para producción, si su entorno está basado en debian.
Una vez que haya configurado todo el Procfile, todo lo que debe hacer es ejecutar: foreman start
y usted está listo para las carreras. Lo uso para resque y faye.
Simplemente crea un inicializador que contiene:
Thread.new do
system("rackup faye.ru -s thin -E production")
end
Mejor opción: