Rails3をApache上で運用する

専用のポートを開けるのではなく、既存の Apache 上で Rails3 アプリを動作させる方法です。

環境

Passengerモジュール

Passengerモジュールのインストール

Apache 上で Rails3 アプリを動かすには、Passenger モジュールを Apache に組み込む必要があります。

gem で Passenger のパッケージを入手して下さい。

$ gem i passenger

続いてインストールを行ないます。

# passenger-install-apache2-module

途中いろいろ必要なパッケージを入れろと警告が出るかと思います。インストール方法まで丁寧に示してくれるので、それに従い対応します。

Apache の設定

続いて、Apache の設定を行ないます。 /etc/apache2/mods-available に移動して、rails.conf、rails.load というファイルを生成して下さい。"rails" の部分は任意の名称で良いです。

rails.load

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.8/ext/apache2/mod_passenger.so

rails.conf

PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.8
PassengerRuby /usr/local/bin/ruby

最後に、公開したい Rails アプリの場所を設定します。Rails アプリを動かしたいバーチャルホストに以下の設定をします。

<VirtualHost *:80>
    ...(略)...
    RailsBaseURI /prof/RailsAppName/public
</VirtualHost>

RailsAppName という Rails アプリを自動生成したさいに、public ディレクトリも生成されています。RailsBaseURI には、public ディレクトリを指定します。URI は、このバーチャルホストの DocumentRoot からの、相対パスになります。

動作確認

ブラウザから、http://ホスト名/prof/RailsAppName/public で Rails アプリにアクセス出来ます。

public をパスから隠蔽する

URL から "public" を隠蔽するには、シンボリックリンクを利用します。Rails アプリ本体を適当な場所に置いて下さい。Apache の DocumentRoot 配下でも、それ以外の場所でも良いです。(自分は、Webサーバのバックアップをまとめて取りたいので、DocumentRoot 配下に置いています)

今回の例では、DocumentRoot 直下の rails ディレクトリに Rails アプリを配置することにします。

まず、以下のようにシンボリックリンクを作成します。

ln -s rails/RailsAppName/public RailsAppName

Apache の RailsBaseUri を以下のように設定します。

RailsBaseUri /RailsAppName

これでブラウザから、http://ホスト名/prof/RailsAppName/ で Rails アプリにアクセス出来ます。

余談

Rails アプリは、Perl や PHP のようなスクリプト言語ではなく、Java Servlet のようなイメージを持つと分かりやすいかと思います。最初のアクセスでは若干処理が重くなり、以降の処理は軽くなります。Servlet と同じく、初回時はコンパイルのようなことをしているのでしょうか。


履歴


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-14 (日) 23:35:00