まじめに Rails アプリを Mongrel cluster でセットアップした時のメモ。環境は、 ruby-1.8.7-p334@rails_2_3_14 です。
注意: Mongrel-1.1.5 は Rails3 ではエラーで動きません。
1.2.0pre2 を使うか、 Rails のバージョンをデグレするか、もしくは、手動で Mongrel を少しいじるか。
もしくは Thin か Phusion Passenger を使ってもいいかと思います。
ちなみにエラーは以下のようなもの。
[Enjoi-MacBook:~/Websites/EnjoiTech/www.enjoitech.com] $ mongrel_rails start ** Starting Mongrel listening at 0.0.0.0:3000 ** Starting Rails with development environment... /usr/local/rvm/gems/ruby-1.8.7-p334@rails_3_0_9/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require': no such file to load -- dispatcher (LoadError)
Passenger を使えばこんな小面倒くさいことはしなくてもいいんですけどね。 cluster とか響きがいいじゃないですか。
Gemfile に必要なものを追加して bundle でインストールします。
$ vi Gemfile
... gem 'mongrel' gem 'mongrel_cluster' ...
$ bundle install
インストールがうまくいったら、 mongrel cluster のセットアップをします。
mongrel_rails コマンドで設定ファイルが作成できます。 svn や git には含めずに、その環境毎に実行すると良いかなと思います。
例えば、ポート 3000 番から 3 つクラスター起動し、 127.0.0.1 のみにバインド、アプリケーションディレクトリは /var/www/www.enjoitech.com だとすると、
$ mongrel_rails cluster::configure -e production -p 3000 -N 3 \ -c /var/www/www.enjoitech.com -a 127.0.0.1 Writing configuration file to config/mongrel_cluster.yml
$ mongrel_rails cluster::start
$ mongrel_rails cluster::restart $ mongrel_rails cluster::stop
$ mongrel_cluster_ctl status $ mongrel_rails cluster::status
これで Mongrel は動作し、 3000 番にアクセスすればアプリケーションが確認できると思いますが、これを apache と連携させて 80 番でアクセスするようにします。
基本的には、 mod_proxy_balancer を使ってアプリケーションサーバと接続するを見てもらえば分かると思います。
それ以外には rails の public ディレクトリにある静的なファイルに関しては、特に rails を経由する必要もないので、除外するのがいいかと思います。
なので、最終的な設定ファイルは
<VirtualHost *:80> ServerName www.enjoitech.com DocumentRoot /var/www/www.enjoitech.com/rails/public <Proxy balancer://mycluster> BalancerMember http://127.0.0.1:3000 BalancerMember http://127.0.0.1:3001 BalancerMember http://127.0.0.1:3002 Order allow,deny Allow from all </Proxy> ProxyPass /images ! ProxyPass /javascripts ! ProxyPass /stylesheets ! ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ ErrorLog "/usr/local/logs/www.enjoitech.com-error_log" CustomLog "/usr/local/logs/www.enjoitech.com-access_log" common </VirtualHost>
最後にアプリケーションをサーバーの起動時にきちんと開始させるように、設定ファイルを作成します。
この作業は root 権限か sudo が必要です。
まず mongrel_cluster の設定ファイルへのシンボリックリンクを /etc/mongrel_cluster 配下に作成します。
$ sudo mkdir /etc/mongrel_cluster $ sudo ln -s /var/www/www.enjoitech.com/config/mongrel_cluster.yml /etc/mongrel_cluster/www.enjoitech.com.yml
次に mongrel_cluster の init ファイルを /etc/init.d/ にコピーして、適切な run level でサーバー起動時に開始するよう設定します。
$ sudo cp /usr/local/rvm/gems/ruby-1.8.7-p334\@rails_2_3_14/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/ $ sudo chmod +x /etc/init.d/mongrel_cluster $ sudo /sbin/chkconfig --level 345 mongrel_cluster on