サブディレクトリで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 graceful

mongrel の起動には mongrel_rails の cluster コマンドを利用して,mongrel_cluster の設定ファイル作成と起動を行います.

具体的には以下のようにします.

$ mongrel_rails cluster::configure --prefix /rails-app -e production -p 4904 -N 2
$ mongrel_rails cluster::start

その他のRails運用方法に関する内容は,紹介しているWebページを以下のエントリにまとめてみましたので,よければご覧ください.

このエントリをdel.icio.usにブックマークしているユーザ数このエントリをdel.icio.usに追加する
このエントリをはてなブックマークしているユーザ数このエントリをはてなブックマークに追加する
 | Tags

コメント

  1. vottie said 76日 later:

    ありがとうございます。 このエントリのおかげで、トラブルなく環境を作ることができました。

    トラックバックしたのですが、1,2はこちらのミスです。 もうしわけありません。 面倒でなければ、1,2は削除してください。

  2. noriaki said 77日 later:

    vottieさん

    コメントありがとうございます.

    お役に立てたようでなによりです. これからもどうぞよろしくお願いします.

    トラックバックの件は了解いたしました.3つの内2つを削除いたしました.

このエントリはアーカイブされています。
コメントする場合は、お手数ですが「このページのURL」を記載した上で、新しいエントリにお願いします。