rbenv + rbenv-gemset + apache + passenger を Mac に入れる


最後にエラーが出て悩んだのでメモ代わりに残します。

## rbenv, ruby-build, rbenv-gemset のインストール

[Homebew](http://brew.sh/)を使ってrbenvの環境を構築します。
途中で依存関係等でエラーが出た場合は、都度対処してください。

```:bash
~ lassy423$ brew install rbenv ruby-build rbenv-gemset
==> Downloading https://github.com/sstephenson/rbenv/archive/v0.4.0.tar.gz
######################################################################## 100.0%
==> Caveats
To use Homebrew's directories rather than ~/.rbenv add to your profile:
  export RBENV_ROOT=/usr/local/var/rbenv

To enable shims and autocompletion add to your profile:
  if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
==> Summary
?  /usr/local/Cellar/rbenv/0.4.0: 31 files, 152K, built in 3 seconds
==> Downloading https://github.com/sstephenson/ruby-build/archive/v20140225.tar.gz
######################################################################## 100.0%
==> ./install.sh
?  /usr/local/Cellar/ruby-build/20140225: 114 files, 496K, built in 4 seconds
==> Downloading https://github.com/jf/rbenv-gemset/archive/v0.5.6.tar.gz
######################################################################## 100.0%
?  /usr/local/Cellar/rbenv-gemset/0.5.6: 12 files, 52K, built in 3 seconds
~ lassy423$ 
```

~/.bashrc と ~/.profile に追記します

```bash:~/.bashrc
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
```
```bash:~/.profile
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
```

追記した内容を読み込み直します。

```bash:bash
~ lassy423$ source ~/.profile
```


## ruby のインストール

任意のバージョンの ruby をインストールします。例として 2.1.1 を使用します。

```bash:bash
~ lassy423$ rbenv install --list
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
（中略）
  2.1.0-rc1
  2.1.1
  2.2.0-dev
（中略）
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev
~ lassy423$ rbenv install 2.1.1
Downloading ruby-2.1.1.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/e57fdbb8ed56e70c43f39c79da1654b2
Installing ruby-2.1.1...
Installed ruby-2.1.1 to /Users/Yoshihiko/.rbenv/versions/2.1.1

~ lassy423$ rbenv rehash
~ lassy423$ rbenv versions
* system (set by /Users/Yoshihiko/.rbenv/version)
  2.1.1
~ lassy423$ rbenv global 2.1.1
~ lassy423$ rbenv versions
  system
* 2.1.1 (set by /Users/Yoshihiko/.rbenv/version)
~ lassy423$ 
```


## gemset を作成する

rbenv-gemset を使ってアプリケーションごとの gemset を作成します。

```bash:bash
~ lassy423$ rbenv gemset
version 0.5.6
rbenv-gemset [command] [options]

possible commands are:
  active
  create [version] [gemset]
  delete [version] [gemset]
  file
  init [gemset]
  list
  version

For full documentation, see: https://github.com/jf/rbenv-gemset#readme
~ lassy423$ rbenv gemset list
~ lassy423$ rbenv gemset create 2.1.1 demosite-gemset
created demosite-gemset for 2.1.1
~ lassy423$ rbenv gemset list
2.1.1:
  demosite-gemset
~ lassy423$ 
```

作成した gemset をアプリケーション配下で有効になるよう設定します。

```bash:bash
~ lassy423$ cd $DEMOSITE_HOME
demosite_home lassy423$ echo demosite-gemset > .rbenv-gemsets
demosite_home lassy423$ rbenv gemset active
demosite-gemset global
demosite_home lassy423$ 
```


## gems のインストール

今回は既存の Rails アプリを動かしたいので、まず bundler だけインストールします。

```bash:bash
demosite_home lassy423$ gem install bundler
Fetching: bundler-1.6.1.gem (100%)
Successfully installed bundler-1.6.1
1 gem installed
demosite_home lassy423$ 
```

続いて、`bundle`コマンドでその他の gems をインストールします。

```bash:bash
demosite_home lassy423$ bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
（中略）
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
demosite_home lassy423$ 
```

最後にインストールした gems を有効にします。

```bash:bash
demosite_home lassy423$ rbenv rehash
```

この時点で、Rails アプリケーション単体で動くようになります。
`rails s`を実行して正常に動かないようであれば、対処してください。


## passenger のインストール

apache は既に入ってる前提で話を進めますが、
入っていない場合は`brew info httpd`でインストールしてください。
途中の`rbenv rehash`を忘れないようにしてください。

```bash:bash
demosite_home lassy423$ gem install passenger
Fetching: daemon_controller-1.2.0.gem (100%)
Successfully installed daemon_controller-1.2.0
Fetching: passenger-4.0.40.gem (100%)
Building native extensions.  This could take a while...
Successfully installed passenger-4.0.40
2 gems installed
demosite_home lassy423$ rbenv rehash
demosite_home lassy423$ passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v4.0.40.
（中略）
Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40
     PassengerDefaultRuby /Users/lassy423/.rbenv/versions/2.1.1/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER to continue.

```

途中で apache の設定が表示されるのでコピーしておきます。


## apache の設定を修正（失敗パターン）

passenger インストール時に表示された apache の設定を追記します。

```conf:/usr/local/etc/apache2/httpd.conf
LoadModule passenger_module /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40
  PassengerDefaultRuby /Users/lassy423/.rbenv/versions/2.1.1/bin/ruby
</IfModule>

RailsEnv development
<VirtualHost *:80>
    ServerName somedomain.com
    # !!! Be sure to point DocumentRoot to 'public'!
    DocumentRoot /Users/lassy423/demosite/public
    <Directory "/Users/lassy423/demosite/public">
        # This relaxes Apache security settings.
        AllowOverride none
        # MultiViews must be turned off.
        Options -MultiViews
        Allow from all
    </Directory>
</VirtualHost>
```

`sudo apachectl start`で apache を起動し、
ブラウザでアクセスすると以下のようなエラー画面が表示されます。
（表示されない場合は構築は終了です）

![20140403_passenger_error.png](https://qiita-image-store.s3.amazonaws.com/0/2022/8a824142-874d-08ce-0c14-a467e1bcc2ac.png "20140403_passenger_error.png")


## apache の設定を修正（成功パターン）

[Stack Overflow](http://stackoverflow.com/questions/19061774/cannot-load-such-file-bundler-setup-loaderror) を参考に、以下の設定を追加します。

```conf:/usr/local/etc/apache2/httpd.conf
SetEnv GEM_HOME /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/
```

最終的な設定は以下のようになりました。

```conf:/usr/local/etc/apache2/httpd.conf
LoadModule passenger_module /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/gems/passenger-4.0.40
  PassengerDefaultRuby /Users/lassy423/.rbenv/versions/2.1.1/bin/ruby
</IfModule>

RailsEnv development
<VirtualHost *:80>
	ServerName somedomain.com
    # !!! Be sure to point DocumentRoot to 'public'!
    DocumentRoot /Users/lassy423/demosite/public
	SetEnv GEM_HOME /Users/lassy423/.rbenv/versions/2.1.1/gemsets/demosite-gemset/
    <Directory "/Users/lassy423/demosite/public">
        # This relaxes Apache security settings.
        AllowOverride none
        # MultiViews must be turned off.
        Options -MultiViews
        Allow from all
    </Directory>
</VirtualHost>
```

## 参考

* [cannot load such file — bundler/setup (LoadError) - Stack Overflow](http://stackoverflow.com/questions/19061774/cannot-load-such-file-bundler-setup-loaderror)