1

私は現在、Rails/Ruby プロジェクトのプロセス監視のオプションを検討しています。

しかし、神を使って複数のアプリケーション(たとえば、1台のマシンで実行されている2つのレールプロジェクト)を監視する方法については、実際には何も見つかりません。

私が見る限り、私は神(システムルビー)をセットアップし、各プロジェクトに独自の構成を追加させました(おそらくデプロイフックで)。これは、さまざまな Ruby バージョン (rbenv、rvm) またはバンドラーを実行しているプロジェクトでも機能するはずです。これは、ゴッド Ruby がプロジェクト コードにアクセスする必要がないためです。

すでにこのように使用している人はいますか?または、より良いアプローチがありますか?

4

1 に答える 1

7

私はすべてのもの (ユニコーン、redis、resque ワーカー) を監視するために神を使用します。基本的なセットアップは次のようになります。

God はグローバルにインストールされ、システムの起動時にロードされ、その構成ファイルを読み取ります/etc/god/all.god

/etc/god/all.god

files = Dir.glob "/etc/god/**/*.god"

files.each do |f|
  next if f == '/etc/god/all.god'
  God.load f
end

/etc/godこのファイルは、とその子のすべての構成ファイルをロードします。展開スクリプトはそこに構成ファイルを置き、神にそれらを (再) ロードするように指示します。

$ ls -l /etc/god
total 16
-rw-r--r-- 1 root   root    108 2012-02-23 16:26 all.god
drwxr-xr-x 2 sergio sergio 4096 2012-03-20 20:59 app1_production
drwxr-xr-x 2 sergio sergio 4096 2012-03-27 00:58 app2_production
drwxr-xr-x 2 root   root   4096 2012-04-23 01:37 util

$ ls -l /etc/god/app1_production/
total 0
lrwxrwxrwx 1 sergio sergio 55 2012-03-20 20:59 redis.god -> /srv/app1_production/current/config/god/redis.god
lrwxrwxrwx 1 sergio sergio 56 2012-03-20 20:59 resque.god -> /srv/app1_production/current/config/god/resque.god
lrwxrwxrwx 1 sergio sergio 57 2012-03-20 20:59 unicorn.god -> /srv/app1_production/current/config/god/unicorn.god

の頭ですunicorn.god

rails_env = "production"
pid_dir = "/srv/app1_#{rails_env}/shared/pids"
rails_root = "/srv/app1_#{rails_env}/current"

God.watch do |w|
  w.name = "unicorn-#{rails_env}"
  w.interval = 30.seconds # default

  # unicorn needs to be run from the rails root
  w.start = "cd #{rails_root} && /home/sergio/.rvm/bin/r193_bundle exec unicorn_rails -c #{rails_root}/config/unicorn/unicorn.#{rails_env}.rb -E #{rails_env} -D"

  # QUIT gracefully shuts down workers
  w.stop = "kill -QUIT `cat #{pid_dir}/unicorn.pid`"

  # USR2 causes the master to re-create itself and spawn a new worker pool
  w.restart = "kill -USR2 `cat #{pid_dir}/unicorn.pid`"

ご覧のとおり、ユニコーンは rvm ラッパーを介して起動されるため、新しいアプリごとに独自の ruby​​ を使用できます。また、独自のstart,stopおよびrestartコマンドを提供するので、god を使用して任意のソフトウェアを監視できます。

このアプローチは私にとって非常にうまく機能します(これまでのところ)。

于 2012-07-09T17:20:25.507 に答える