RubyonRailsをApacheとPassengerで動かす

RailsのデフォルトのサーバーはWEBrickなんだけど、
ウェブサービスを立ち上げるにはApacheとかNginxで運営するかと。

ApacheとPassengerでRailsを動かす際に、後から見返しそうだからメモします。
CentOS-6.4, Ruby2.0, Rails4.0

CentOSが起動しました、というところから。

Apache〜Rubyをインストール

とりあえず最新の状態にアップデート。
sudo yum update -y

Apacheがインストールされてるか確認(しなくていいけど)
yum list installed | grep httpd

Apacheインストール
sudo yum install -y httpd

Apache起動
sudo service httpd start

Apacheをサーバー起動時に自動的にON
sudo chkconfig httpd on

gitをインストール
sudo yum -y install git

rbenvをインストール
sstephenson/rbenv

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l

rbenvのインストールを確認


ruby buildをインストール
<a href="https://github.com/sstephenson/ruby-build" target="_blank" title="git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build">git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build</a>
```git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build```

Rubyをインストール

rbenv install -v 2.0.0-p247
rbenv rehash


Rubyのバージョンを選択
```rbenv global 2.0.0-p247```

rbenvで確認
```rbenv versions```

Rubyで確認
```ruby -v```



<h3>Passengerのインストールと設定</h3>

インストール

sudo gem install passenger


passenger-install-apache2-module


<strong> ##### 注意 ##### </strong>
passenger-install-apache2-moduleのコマンドを
sudoを付けて実行するとrootでインストール、
付けないとログインしているユーザーでインストールとなる。
<strong>特にVagrantをつかってお手軽にローカル環境をつくっていると忘れがち。
その場合はvagrant ssh でログインしてsudoなしでインストール。</strong>

環境によっては、2行目を実行すると下のようなエラーがでるので、
素直にエラーメッセージに従う。

 * To install Curl development headers with SSL support:
   Please install it with yum install curl-devel
 * To install Ruby development headers:
   Please install it with yum install ruby-devel
 * To install Apache 2 development headers:
   Please install it with yum install httpd-devel
 * To install Apache Portable Runtime (APR) development headers:
   Please install it with yum install apr-devel
 * To install Apache Portable Runtime Utility (APU) development headers:
   Please install it with yum install apr-util-devel

エラーメッセージで指摘されている不足分をインストール。
```sudo yum install curl-devel ruby-devel httpd-devel apr-devel apr-util-devel```

再度トライする
```passenger-install-apache2-module```

完了すると下のようなメッセージがでる。
大事なのでメモ。

The Apache 2 module was successfully installed.
Please edit your Apache configuration file, and add these lines:
   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.18/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.18
   PassengerDefaultRuby /usr/bin/ruby
--------------------------------------------
Deploying a Ruby on Rails application: an example
Suppose you have a Rails application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public:
...続く


<strong>Apacheの設定を変更する</strong>
```sudo vi /etc/httpd/conf.d/example.conf```
(exampleは何でもいいよ)
で、空のファイルができるので、下記のようにPassengerの設定を追加する。


下記はローカル環境をVagrantで作ってて、
vagrantユーザーでログインしてる状態でPassengerをインストールしたと想定してます。
実際にはPassengerをインストールした時に出たメッセージを参考にしてください。
yourrailsappはRailsがインストールされているディレクトリを意味してます。

<pre class="lang:apache mark:12,10 decode:true " >
### Passenger Settings ###
LoadModule passenger_module /home/vagrant/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/passenger-4.0.14/buildout/apache2/mod_passenger.so
PassengerRoot /home/vagrant/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/passenger-4.0.14
PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.0.0-p247/bin/ruby

### Virtual Host for Passenger ###
   &lt;VirtualHost *:80&gt;
      ServerName yourrailsapp.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /vagrant/yourrailsapp/public
      PassengerEnabled on
      &lt;Directory /vagrant/yourrailsapp/public&gt;
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      &lt;/Directory&gt;
   &lt;/VirtualHost&gt;``` 

Vagrantの共有フォルダ設定の関係で、ドキュメントルートをvar/www/htmlでなく/vagrantにしてる人もいるはず。
そんな時はヴァーチャルホスト設定のDocumentRootパスが上のようになるので注意しましょう。
本番環境なんかでは普通にアパッチで設定しているDocumentRootでOKなので気にしない。

これで、ApacheとPassengerを使ったRailsが動くはず。




何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた