RailsをApacheとMongrel_clusterで動かす(初級編)
RailsをApache2.2配下で動かす案件が出てきたので、ちょっと試してみた。いくつか懸案はあるので、それは後で追試するとして、まずは動作までを確認。
今回使った環境は以下の通り。
- rails 2.2.2
- mongrel 1.1.5
- mongrel_cluster 1.0.5
- Apache 2.2.11
- Ruby 1.8.7 P72
Rails側の準備。Ruby/Railsは既にインストール済みで、Railsで作ったサンプルアプリがある状態からスタート(Mongrelもインストール済み)
まずmongrel_clusterからインストールする
#gem install mongrel_cluster
Railsのアプリのルートに移動する
#cd RAILS_ROOT (RAILS_ROOTは適当に読み替えてください)
MongrelCluster用の設定ファイルを作る。オプションはいろいろあるけれど、開発モードで動作させて、5個起動としてみた。
#mongrel_rails cluster::configure -e development -p 8000 -N 5 Writing configuration file to config/mongrel_cluster.yml.
書き込まれたファイルを見てみる
$ cat ./config/mongrel_cluster.yml --- log_file: log/mongrel.log port: "8000" environment: development pid_file: tmp/pids/mongrel.pid servers: 5
手動でも書き換えられるけど、基本的な定義ファイルがymlに書き込んでくれる。コマンドで定義を修正すると毎回上書きするのでその点は注意が必要かな。
後は、RAILS_ROOTにいる状態で起動と停止を行う。
#mongrel_rails cluster::start #mongrel_rails cluster::stop
今回の定義で5個起動するようにすると8000から連番で8004までを消費してた。
これでrails側の準備は完了。
次にApache側に移る。まずはApacheのconfigure。他とのからみがあるので、以下のオプションで設定
# configure --enable-proxy --enable-proxy-balancer --enable-module=so --enable-rewrite # make # make install
以下のコマンドで組み込み内容を確認する
#/usr/local/apache2/bin/httpd -l
少なくとも以下の内容が入っていれば準備OK。
mod_proxy.c mod_proxy_balancer.c
これでhttpd.confに以下の定義を追加してみる。この定義だと/から全部飛ばしてる。ちなみに192.168.0.138が前述したRailsが動作しているサーバー。
ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ <Proxy balancer://mycluster/> BalancerMember http://192.168.0.138:8000 loadfactor=20 BalancerMember http://192.168.0.138:8001 loadfactor=20 BalancerMember http://192.168.0.138:8002 loadfactor=20 BalancerMember http://192.168.0.138:8003 loadfactor=20 BalancerMember http://192.168.0.138:8004 loadfactor=20 </Proxy>
上記の状態でApacheを起動してアクセスできることは確認できた。
懸案事項としては、以下の通り。
- /以下を全部Mongrelに飛ばしているので自由がきかない
- cssやjavascriptもMongrelから戻すのは正のか?(Apacheから返すべき?)
- Mongrelサーバー数によるメモリの消費量を検証する必要あり
明日以降確認が取れたら追記してゆこう。
追試
RailsのViewに<%=javascript_include_tag :all%>をつっこんでみてJavascriptとかどうかとテストしてみたが、とりあえず動作はしていることは確認した。