Ruby on RailsをWebrickからApache(Passenger)に変更。

    wow
    どうも。
    伊藤です。

    先月、自社サービスとして「WOW」のAndroid版をリリースしました。
    WOWは、ここ最近多い検索型のマッチングサービスではなく、偶然の出会いを楽しむための新しいマッチング手段です。
    iOS版も今月中にリリース予定ですので是非お試しください!

    本題に戻ります。
    上述したWOWのサーバーサイドはRoRで開発しているのですが、開発当時はWebサーバーとしてWebrickを利用していました。
    WebrickはWebサーバーも梱包した形でアプリケーションを共有できるため、開発時や小規模サービス、ミニマムスタートという点では非常に優れていますが、ApacheやNginxなどWebサーバー専用で作られたものと比較するとやはり性能(処理速度など)や汎用性は劣ります。
    実際にApache Benchで速度を比較してみましたが、ApacheやNginxの方が優れていました。

    ということで、本番環境のWebサーバーをWebrickからApache + passengerに変更しました。
    まずは必要なパッケージをインストールします。

    Apacheをインストールします。
    $ sudo yum install httpd httpd-devel

    passengerをインストールします。
    passengerはRailsをApacheで動かすためのApacheのモジュールです。
    $ sudo gem install passenger

    次に、passengerモジュールのApacheへインストールします。
    $ sudo passenger-install-apache2-module

    会話式でインストールが開始されるのでEnterキーを押下しながら進めます。(言語では必ず「Ruby」を選択してください。)
    必要なモジュールが無い場合は必要なファイル、ならびに親切にコマンドが表示されますので画面に従い必要なモジュールをインストールします。
    晴れてインストールが正常終了すると、上記コマンド結果の最後にhttpd.confに追記が必要な記述が表示されます。
    LoadModule passenger_module /usr/local/rvm/gems/ruby-2.2.3/gems/passenger-5.0.29/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
    PassengerRoot /usr/local/rvm/gems/ruby-2.2.3/gems/passenger-5.0.29
    PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.2.3/wrappers/ruby
    </IfModule>

    コピーを忘れてしまった・・・という場合は以下のコマンドで記述内容が表示されますのでご安心ください。
    passenger-install-apache2-module --snippet

    上記の記述内容をhttpd.cofに記載し、バーチャルホストを設定します。
    <VirtualHost *:80>
    DocumentRoot /var/www/foge/public
    ServerName sample
    RackEnv production
    ...
    ...
    ...
    </VirtualHost>

    DocumentRootにはRailsアプリケーションのpublicディレクトリを指定します。
    RackEnvは用途によりproductionまたはdevelopmentを設定します。

    そしてApacheを再起動します。
    Webrickが起動している場合、且つ同じポートを利用している場合はコンフリクトするため、Webrickを停止してからApacheを起動してください。
    sudo apachectl restart

    これでApache(Passenger)経由でRuby on Railsアプリケーションにアクセスできるようになります。

    ではでは。