Автозапуск сервера Faye, когда я запускаю сервер Rails - PullRequest
17 голосов
/ 21 июня 2011

В настоящее время Faye работает с моим приложением Rails 3.0.9. Однако в моем терминале открыты две отдельные вкладки. Один для сервера Faye, а другой для сервера Rails. Как их интегрировать и автоматически запускать сервер Faye при запуске Rails?

Чтобы запустить Faye Server, я запускаю:

rackup faye.ru -s thin -E production

faye.ru

require 'faye'
faye_server = Faye::RackAdapter.new(:mount => '/faye')
run faye_server

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 4 ]

13 голосов
/ 21 июня 2011

Просто создайте инициализатор, содержащий:

Thread.new do
  system("rackup faye.ru -s thin -E production")
end

Лучший вариант:

Использование https://github.com/FooBarWidget/daemon_controller

7 голосов
/ 21 октября 2011

В настоящее время я бы просто использовал Форман для этого: https://github.com/ddollar/foreman

Создав Procfile, вы можете указать, какие демоны должны запускаться (с контролем того, сколько из них вы хотите), и хранить все в одном окне терминала (с отличной цветовой кодировкой каждого процесса). Он может даже экспортировать в сценарии upstart или init.d для производства, если ваша среда основана на debian.

Как только ваш Procfile настроен, вам нужно всего лишь запустить: foreman start и вы отправитесь в гонку. Я использую это для resque и faye.

3 голосов
/ 25 сентября 2012

Я написал этот скрипт в 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

Сильно модифицировано из сценариев единорога, которые Райан Бейтс использовал в своем развертывании VPS (только для профессионалов) .

Сделать его исполняемым

chmod +x config/thin_example.sh

Вам потребуется символическая ссылка на init.d (после chmod + x, чтобы сделать его исполняемым)

sudo ln -nfs /home/deployer/apps/example/current/config/thin_example.sh /etc/init.d/thin_example

Тогда, если вы хотите, чтобы он запускался с сервера

 sudo update-rc.d thin_example defaults

В противном случае вы просто должны быть в состоянии /etc/init.d/thin_example [start|stop|restart]. Важным моментом, который следует отметить, является то, что я говорю, что rackup должен запускаться в режиме демона (-D), и явно устанавливаю PID, чтобы потом его можно было убить.

3 голосов
/ 11 февраля 2012

В Ubuntu вы должны использовать систему инициализации операционной системы - 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 

Меня не устраивает метод вызова Ruby, поскольку он изменится. Но преимущества в том, что он запустится при запуске системы и возродится, если умрет или вы убьете его.

Пусть Upstart позаботится о том, чтобы демонизировать процесс и убедиться, что он продолжает работать.

...