17

我目前让 Faye 使用我的 Rails 3.0.9 应用程序。但是,我在终端中打开了两个单独的选项卡。一个用于 Faye 服务器,一个用于 Rails 服务器。如何集成它们并在 Rails 启动时自动运行 Faye 服务器?

要启动 Faye 服务器,我正在运行:

rackup faye.ru -s thin -E production

faye.ru

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

如果您需要更多信息,请告诉我。

4

4 回答 4

13

只需创建一个包含以下内容的初始化程序:

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

更好的选择:

使用https://github.com/FooBarWidget/daemon_controller

于 2011-06-21T19:37:22.457 回答
7

如今,我只使用 Foreman:https ://github.com/ddollar/foreman

通过创建 Procfile,您可以指定需要运行哪些守护程序(控制您想要的每个守护程序的数量),并将所有内容保存在一个终端窗口中(每个进程都有很好的颜色编码)。如果您的环境是基于 debian 的,它甚至可以导出到 upstart 或 init.d 脚本用于生产。

一旦你的 Procfile 设置完毕,那么你需要做的就是运行:foreman start然后你就可以参加比赛了。我用它来做resque和faye。

于 2011-10-21T03:55:58.640 回答
3

在 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 负责妖魔化进程并确保它继续运行。

于 2012-02-11T07:59:34.383 回答
3

我在 config/thin_example.sh 中编写了这个 shell 脚本

#!/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

从 Ryan Bates 在他的VPS 部署 railscast (pro only)中使用的独角兽脚本进行了松散的修改。

使其可执行

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,以便以后可以将其终止。

于 2012-09-25T03:39:20.797 回答