RVMとかRubiesとかBundlerとか、いろいろあって訳わかんないけど、
とりあえずApache + RVM + Nginxが一番楽かなという印象。
(Rails3アプリを管理するのにBundlerも使うけど)
80番ポートを受け付けるのはApache。
そのApacheがプロキシになって、後ろのNginx(80番ポート以外で起動)に転送する。
RubyとGemsetの数だけNginxを起動させなきゃいけないけど、多分これが最小。
Nginxを使わずにスタンドアローンのPassengerにプロキシで接続してもいいかも知れないけど、ポートの管理が面倒になりそうだからNginxを使った。
RVMをインストール
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
Ruby1.8.7とRails2.3をインストール
Nginxのインストールディレクトリは、
/usr/local/rvm/nginx/ruby-1.8.7-p358@rails23
を指定する。
Rails2を動かすにはRubyGemsが新し過ぎるから、ダウングレードする。
rvm install 1.8.7 rvm use 1.8.7 rvm gemset create rails23 rvm use 1.8.7@rails23 gem install rails -v 2.3.14 gem install passenger rvmsudo passenger-install-nginx-module gem update --system 1.6.2
Ruby1.9.3とRails3.2をインストール
Nginxのインストールディレクトリは、
/usr/local/rvm/nginx/ruby-1.9.3-p125@rails32
を指定する。
rvm install 1.9.3 rvm use 1.9.3 rvm gemset create rails32 rvm use 1.9.3@rails32 gem install rails gem install passenger rvmsudo passenger-install-nginx-module
Nginxの設定
/usr/local/rvm/nginx/ruby-1.9.3-p125@rails32/conf/nginx.conf を編集。
passenger_rootとpassenger_rubyはRubyとGemsetのペアに合わせる。
複数のNginxでlistenするポートが被らないようにする。
今回は8 + Rubyのバージョンとした。
http { passenger_root /usr/local/rvm/gems/ruby-1.9.3-p125@rails32/gems/passenger-3.0.11; passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p125@rails32/ruby; server { listen 8193; server_name app1.example.com; root /somewhere/public; passenger_enabled on; } }