RubyonRailsをApacheとPassengerで動かす

Shunsuke Sawada

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

1
2
3
4
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のインストールを確認

rbenv```
1
2
3
4
5
6
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Rubyのバージョンを選択
```rbenv global 2.0.0-p247```

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

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



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

インストール

sudo gem install passenger

1

passenger-install-apache2-module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<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が動くはず。




Shunsuke Sawada

おすすめの記事

CakePHP 2.x JSヘルパーでajax通信(ajax helperは使わない)
20
Rails4でQiita投稿ボタンをつくった
18
紙のデザイナーがウェブ開発できるようになるまでに必要なこと
451