mongrel_cluster とそのサービスの自動起動
mongrel は入ってるよね。それで、「sudo gem install mongrel_cluster」
そして下記とかいろいろ見ながら。
- /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/README
- /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/examples/mongrel.conf
- /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/README
ユーザとグループ
一応 Railsサービス専用ユーザを用意する、それは mongrel とする。
リソースに用意されてる自動起動用スクリプト /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster でのユーザ(グループ)がそうだし。
CONF_DIR=/etc/mongrel_cluster PID_DIR=/var/run/mongrel_cluster USER=mongrel
ユーザとグループ作成はこんな感じか。
groupadd -g 400 mongrel useradd -c "Rails Applications" -g mongrel -m -u 400 mongrel
手元の Debian では、システム系が 100超くらいでいて、普通のユーザが 1000 からとかそんな感じ。まあ間の 400 にしてみたけど、500くらいとか、或はシステム系の次の順番とかでもいいのかな。
以下そのユーザで作業、とはいってもパスワード有効にしてないし「sudo -u mongrel コマンド」か、或は「sudo su mongrel」でログインしてから。
Railsアプリケーションと初期設定
取り敢えず mongrelユーザで所要の Railsアプリケーションを mongrelユーザホームディレクトリにチェックアウト、まあサブディレクトリ(rails)でも切っておいて。
と、言うことは mongrelユーザにレポジトリへのアクセス方法が無くてはいけないわけだ、そうすべきか。むしろ一般ユーザでチェックアウトして、設定ファイル等も同様、実行ユーザを mongrelにするという方向性もありか、場所が mongrelユーザホームだからそれはそれで面倒か。
database.yml を調整、むしろ production環境をしっかりと。development環境はちゃんと書くが、test環境はいいや、使わない。
その PostgreSQLだけど、mongrelユーザも作っておかないといけない、dbcreate権限は無しにしておく、使うだけ。だからデータベース自体は別につくっておいて
postgres=# GRANT ALL ON DATABASE photo_production_mongrel to mongrel; GRANT
rake db:migrate も。と、development も production も、script/server で動く。
「sudo -u mongrel rake db:migrate」は兎も角「sudo -u mongrel env RAILS_ENV=production rake db:migrate」も頑張る。
mongrel_clusterの設定
ますは設定ファイル mongrel_cluster.yml の作成
sudo -u mongrel mongrel_rails cluster::configure -eproduction -p3101 -a0.0.0.0 --log=/home/mongrel/rails/photo/log/production.log --pid=/var/run/mongrel_cluster/photo.pid -c/home/mongrel/rails/photo --user=mongrel --group=mongrel --prefix=/photo -N3
PIDファイル場所/var/run/mongrel_cluster/、前述 init.dスクリプトがここを使いたがるのでそうしておく。本当はログも(OS環境的にか)統一的なところにすべきなんだろうが、(ログローテート含めて)またその内。
そしてそのディレクトリのオーナーは変更
[678] sudo chown mongrel:mongrel /var/run/mongrel_cluster [679] ll -d /var/run/mongrel_cluster drwxr-xr-x 2 mongrel mongrel 4096 2008-10-21 09:17 /var/run/mongrel_cluster/
[1678] cat config/mongrel_cluster.yml
-
- -
ちょっとやってみる
[1697] sudo -u mongrel mongrel_rails cluster::start starting port 3101 starting port 3102 starting port 3103 [1698] ~mongrel/rails/photo 23:14 1019 [1701] sudo -u mongrel mongrel_rails cluster::stop stopping port 3101 stopping port 3102 stopping port 3103 [1702] ~mongrel/rails/photo 23:16 1019
動いた、アクセスの際は折角定義しておいたパスprefix 注意。
そしたら /etc設定ファイルの準備
sudo mkdir /etc/mongrel_cluster sudo ln -s /home/mongrel/rails/photo/config/mongrel_cluster.yml /etc/mongrel_cluster/photo.yml
これで、mongrel_cluster_ctl start|status|restart|stop が効くようになる。
[1760] sudo mongrel_cluster_ctl start ~ 00:00 1020 Starting all mongrel_clusters... [1761] sudo mongrel_cluster_ctl status ~ 00:00 1020 Checking all mongrel_clusters... mongrel_rails cluster::status -C photo.yml missing pid_file: /home/mongrel/rails/photo/tmp/photo.3101.pid found mongrel_rails: port 3101, pid 6348 missing pid_file: /home/mongrel/rails/photo/tmp/photo.3102.pid found mongrel_rails: port 3102, pid 6351 missing pid_file: /home/mongrel/rails/photo/tmp/photo.3103.pid found mongrel_rails: port 3103, pid 6354 [1762] sudo mongrel_cluster_ctl stop [1769] sudo mongrel_cluster_ctl status ~ 00:03 1020 Checking all mongrel_clusters... mongrel_rails cluster::status -C photo.yml missing pid_file: /home/mongrel/rails/photo/tmp/photo.3101.pid missing mongrel_rails: port 3101 missing pid_file: /home/mongrel/rails/photo/tmp/photo.3102.pid missing mongrel_rails: port 3102 missing pid_file: /home/mongrel/rails/photo/tmp/photo.3103.pid missing mongrel_rails: port 3103
mongrel_cluster_ctlコマンドは、デフォルト設定ファイルディレクトリ/etc/mongrel_cluster/ から .yml ファイルを探してそれをやってるみたい。特に設定ファイルを指定するときは、mongrel_railsコマンドの -C(大文字)オプションとは違って -c(小文字)オプションになる。
自動起動、init.d と rc.d
[1821] sudo cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/ [1824] sudo chmod a+x /etc/init.d/mongrel_cluster
sudo /etc/init.d/mongrel_cluster start とかしてみる。
ああ、ユーザ、グループ mongrel:mongrel でOK、/var/run/mongrel_cluster にPID出来る、オーナーは mongrel:mongrel、photo.3103.pid の様な感じで。
ログはまだ、/home/mongrel/rails/photo/log に作ってるけど、
[1999] ls -l /home/mongrel/rails/photo/log 合計 140 -rw-r--r-- 1 mongrel mongrel 9403 2008-10-21 09:21 development.log -rw-rw-rw- 1 mongrel mongrel 9536 2008-10-21 09:34 production.3101.log -rw-rw-rw- 1 mongrel mongrel 9536 2008-10-21 09:34 production.3102.log -rw-rw-rw- 1 mongrel mongrel 9536 2008-10-21 09:34 production.3103.log -rw-rw-rw- 1 mongrel mongrel 87536 2008-10-21 09:36 production.log
こんな感じ。PID付きは各起動ログで、普通のログはPID無しのに入ってくのかな。
さらに update-rc.d
[1839] sudo /usr/sbin/update-rc.d mongrel_cluster defaults Adding system startup for /etc/init.d/mongrel_cluster ... /etc/rc0.d/K20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc1.d/K20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc6.d/K20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc2.d/S20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc3.d/S20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc4.d/S20mongrel_cluster -> ../init.d/mongrel_cluster /etc/rc5.d/S20mongrel_cluster -> ../init.d/mongrel_cluster
自動起動。起動時下記あり、
Starting all mongral_clusters...
確かに自動起動してる。