Ответ 1
Просто создайте инициализатор, содержащий:
Thread.new do
system("rackup faye.ru -s thin -E production")
end
Лучший вариант:
Используйте https://github.com/FooBarWidget/daemon_controller
В настоящее время у меня работает 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
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Просто создайте инициализатор, содержащий:
Thread.new do
system("rackup faye.ru -s thin -E production")
end
Лучший вариант:
Используйте https://github.com/FooBarWidget/daemon_controller
В настоящее время я просто использовал Foreman для этого: https://github.com/ddollar/foreman
Создав Procfile, вы можете указать, какие демоны должны запускаться (с контролем для того, сколько из них вы хотите), и хранит все в одном окне терминала (с отличным цветовым кодированием каждого процесса). Он может даже экспортировать скрипты upstart или init.d для производства, если ваша среда основана на debian.
Как только ваш Procfile настроен, все, что вам нужно сделать, запускается: foreman start
, и вы уходите на гонки. Я использую его для resque и faye.
В 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 позаботится о демонизации процесса и убедившись, что он продолжает работать.
Я написал эту оболочку 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, чтобы я мог его убить позже.