Подтвердить что ты не робот

Автозапуск сервера Faye при запуске сервера Rails

В настоящее время у меня работает 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

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

4b9b3361

Ответ 1

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

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

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

Используйте https://github.com/FooBarWidget/daemon_controller

Ответ 2

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

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

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

Ответ 3

В Ubuntu вы должны использовать систему инициализации операционных систем - Upstart.

[email protected]:~$ 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 позаботится о демонизации процесса и убедившись, что он продолжает работать.

Ответ 4

Я написал эту оболочку script в 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-развертывании railscast (только для профессионалов).

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

chmod +x config/thin_example.sh

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

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]. Важным моментом является то, что я говорю, что я начинаю работать в режиме демона (-D) и явно устанавливаю PID, чтобы я мог его убить позже.