Railsアプリケーションのデプロイメントを効率化するテクニック
Rails Webアプリケーションをデプロイするためには優れた方法が数多くありますが、今回は1つだけ取り上げたいと思います。これはシングルサーバーの場合に適したデプロイメント方法ですが、必要であればサーバーを追加することもできます。この方法ではnginxサーバー、Mongrelサーバー、memcachedシステムを使用します。memcachedシステムは高性能な、分散型のメモリオブジェクトキャッシングシステムであり、データベースリクエストとWebサービスリクエストの両方のキャッシュに使用できます。Railsアプリケーションはスケーリング可能ですが、大半のWebアプリケーションと同様、同時に使用できるユーザーはごくわずかです。Mongrel自体も遅くはないのですが、Mongrelにmemcachedを追加すれば、同時ユーザー数がもっと大きく増えるまで複雑なデプロイメントを先延ばしにすることができます。
開発用のPCにはRailsアプリケーションの開発環境を設定し、Linuxサーバーには本番環境を設定しなければなりません。これは重要なポイントです。なぜなら、今回はCapistranoを使用していないので、新バージョンのアプリケーションをデプロイする際にサーバー上のデプロイメントディレクトリでそのままsvn updateが行えることを前提としているからです。
memcachedの使い方は、gemをインストールするのと同じくらい簡単です。
sudo gem install memcache-client
production.rbファイルに次の2行を追加してください:
config.action_controller.fragment_cache_store = :mem_cache_store config.action_controller.session_store = :mem_cache_store
私は、普段はこの2行をdevelopment.rbファイルに追加していません。
LinuxサーバーにMongrelクラスタをデプロイする
Ruby、Gem、およびRailsがLinuxサーバーにインストールしてあれば(開発用のPCにインストールしてあるものと同じバージョン番号のものを使います)、サーバー上にMongrelクラスタをデプロイすることができます。例として、私のCookingSpace.comプロジェクトを使ってデモンストレーションしていきます。まず、Railsアプリケーションのものと同じ名前で、特権のないアカウントを新規に作成します。私はよく、Webアプリケーションにちなんだアカウント名をつけます。後でこのnginx Webサーバーを使用して複数の仮想ドメイン名にサービスを提供したくなることがあるかもしれないし、各WebアプリケーションのMongrelクラスタを専用アカウントの下で実行したいからです。
次に、デプロイメントディレクトリを作成し、アカウントを作成し、デプロイメントディレクトリの所有者を設定します。
sudo mkdir /var/mongrel sudo mkdir /var/mongrel/cookingspace sudo /usr/sbin/groupadd cookingspace sudo /usr/sbin/adduser -r cookingspace -g cookingspace sudo chown -R cookingspace /var/mongrel/cookingspace sudo chgrp -R cookingspace /var/mongrel/cookingspace
ここで、SSHを利用してアカウントcookingspaceを使って自分のサーバーにリモートログインし、subversionサーバーからWebアプリケーションの最新バージョンを取得します。
cd /var/mongrel/cookingspace/ svn co svn+ssh://MY_ACCOUNT@MY_SERVER.com/home/svn/svn-repos/cookingspace
私のWebアプリケーションではMySQLを使用しているので、Linuxサーバー上でデータベースを設定する必要があります。
mysqladmin create cookingspace_production --user=root -p mysqladmin create cookingspace_development --user=root -p mysqladmin create cookingspace_test --user=root -p export RAILS_ENV=production rake db:migrate
次に進む前に、単体でMongrelを実行してWebアプリケーションをテストしておくのがよいでしょう。ただし、プロダクションモードで行ってください。
cd /var/mongrel/cookingspace/ script/server --environment=production
正常に動作したら、次にmongrel_clusters Ruby Gemをインストールします:
sudo gem install mongrel_cluster
ユーザーcookingspaceでログインしたら、3つのMongrelのコンフィグレーションを行って、クラスタの起動と停止のテストをします。
cd /var/mongrel/cookingspace/ mongrel_rails cluster::configure -e production -p 3001 -n 3-a 127.0.0.1 --user cookingspace --group cookingspace mongrel_rails cluster::start mongrel_rails cluster::stop