サブディレクトリでRailsを動かす方法
書いた人: noriaki 2007,07月21日(土) 01:11
先日のRailsの運用方法紹介ページをまとめたエントリでも少し触れた,サブディレクトリでRailsアプリケーションを運用する方法を紹介します.
概要
以下の2種類のパターンについてサブディレクトリでRailsを動かす方法を紹介します.
- Apacheとmod_proxyをフロントエンドに利用し,mongrelをRailsアプリケーションサーバとして利用する方法
- Apacheとmod_proxy_balancerで付加分散しつつ,バックエンドにmongrelを利用する方法
これらは,Railsの運用方法としてよく見かけるサブドメインを利用した環境構築は,DNS設定の関係などでできない方などに有用だと思います.
目標とする構成
よく見かける http://rails-app.example.com/ のようなURLでRailsを動かすのではなく,http://example.com/rails-app/ のようにサブディレクトリ以下でRailsを動かすことを目標にします.
なお,動作確認は以下の環境で行いました.
- OS:CentOS4.3とMac OS X 10.4(たぶん)
- Rails:1.1.6と1.2.3
- Apache:2.2.4
- mongrel:1.0.1(mongrel_cluster:0.2.1)
Apache + mod_proxy + mongrel
Apacheのhttpd.confに以下の内容を追加します(VirtualHost).
## VirtualHost
# Configurations for Rails service in Sub-Directory
NameVirtualHost 192.168.0.1:80 # 自身のサーバIPアドレス
<VirtualHost example.com:80> # 自身のサーバドメイン
ServerName example.com
ServerAdmin rails-admin@example.com
# その他VirtualHostの設定
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# mongrelが利用するポート番号を指定した上,
# サブディレクトリのパスを指定します
ProxyPass /rails-app/ http://127.0.0.1:4904/rails-app/
ProxyPassReverse /rails-app/ http://127.0.0.1:4904/rails-app/
</VirtualHost>VirtualHostによる設定は,管理を楽にするためです. 注意点としては,ProxyPass に対するサブディレクトリパスの指定は最後のスラッシュまで含めてください.その後,Apacheを再起動します.
# apachectl graceful続いて,公開するRailsアプリケーションのディレクトリに移動し,mongrelを起動します.このとき,オプションとして--prefixを指定することによってサブディレクトリでのURL Routingをmongrelがよしなに計らってくれます.
具体的には以下のようにして mongrel を起動します.
$ mongrel_rails start -d --prefix /rails-app -e production -p 4904以上のようにすることで,http://example.com/rails-app/ へのアクセスでRailsアプリケーションを利用することができるようになります.
Apache + mod_proxy_balancer + mongrel_cluster
mod_proxy_balancerとmongrel_clusterを利用して付加分散を行いつつサブディレクトリでRailsアプリケーションを運用する場合も,基本的には上記と同様です.
以下のようにApacheのhttpd.confに追加します.
## VirtualHost
# Configurations for Rails service in Sub-Directory
NameVirtualHost 192.168.0.1:80 # 自身のサーバIPアドレス
<VirtualHost example.com:80> # 自身のサーバドメイン
ServerName example.com
ServerAdmin rails-admin@example.com
# その他VirtualHostの設定
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /rails-app/ balancer://rails-app/
ProxyPassReverse /rails-app/ balancer://rails-app/
# mongrelが利用するポート番号を指定した上,サブディレクトリのパスを指定します
<Proxy balancer://rails-app/>
BalancerMember http://127.0.0.1:4904/rails-app loadfactor=10
BalancerMember http://127.0.0.1:4905/rails-app loadfactor=10
</Proxy>
</VirtualHost>こちらでは,ProxyPass には balancer の名前を指定し,Proxy ディレクティブ内ではサブディレクトリの最後のスラッシュを含めないところに注意してください.その後,Apacheを再起動します.
# apachectl gracefulmongrel の起動には mongrel_rails の cluster コマンドを利用して,mongrel_cluster の設定ファイル作成と起動を行います.
具体的には以下のようにします.
$ mongrel_rails cluster::configure --prefix /rails-app -e production -p 4904 -N 2
$ mongrel_rails cluster::startその他のRails運用方法に関する内容は,紹介しているWebページを以下のエントリにまとめてみましたので,よければご覧ください.


ありがとうございます。 このエントリのおかげで、トラブルなく環境を作ることができました。
トラックバックしたのですが、1,2はこちらのミスです。 もうしわけありません。 面倒でなければ、1,2は削除してください。
vottieさん
コメントありがとうございます.
お役に立てたようでなによりです. これからもどうぞよろしくお願いします.
トラックバックの件は了解いたしました.3つの内2つを削除いたしました.