WebサーバにはApache(+ passenger module)を使い、VirtualHostで複数のWebアプリケーションを切り分けている。
さて、以前 開発用ユーザで Ruby1.9.2を試すためにrvmを導入した。
http://tech-baker.blogspot.com/2011/09/rvm-ruby-192-rails3.html
Apacheの実行環境では、デフォルトのruby1.8.7が動作してしまう。かといって、rvmをapache環境に導入したら、ruby1.8.7ベースのアプリケーションが動かない。ruby1.8.7もruby1.9.2もapache環境で動かしたい。以下のPassengerサイトを参考にチャレンジした。
http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/
目指した環境は以下の図の通り。Apacheは、リバースプロキシとして利用され、ruby1.9.2のアプリケーションは、Passengerスタンドアローンで動かす。
図:Reverse Proxyを利用した複数Versionのruby Web app
Apache + passenger ----- app1.sample.com (ruby 1.8.7 + rails2.8.x) Apache + passenger ----- app2.sample.com (ruby 1.8.7 + rails2.8.x) Apache + mod_proxy ----- passenger ----- app3.sample.com ( ruby 1.9.2 + rails3 by rvm)
rails3アプリケーションは、開発ユーザdevmanのディレクトリ /home/devman/public_html/app3 に作成した。
rvm環境が出来ていることを前提で、作業は以下の手順
- passenger(スタンドアローン)のインストール
- apacheのプロキシー設定
- 起動スクリプト作成
- (必要であれば)iptablesをいじる
passengerのインストールはgemから行う。開発ユーザ環境も示しておいた。
devman$ rvm info ruby-1.9.2-p290: system: uname: "Linux www.miyabiit.com 2.6.18-274.3.1.el5 #1 SMP Tue Sep 6 20:13:52 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux" bash: "/bin/bash => GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)" zsh: " => not installed" rvm: version: "rvm 1.8.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]" ruby: interpreter: "ruby" version: "1.9.2p290" date: "2011-07-09" platform: "x86_64-linux" patchlevel: "2011-07-09 revision 32553" full_version: "ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]" homes: gem: "/home/devman/.rvm/gems/ruby-1.9.2-p290" ruby: "/home/devman/.rvm/rubies/ruby-1.9.2-p290" binaries: ruby: "/home/devman/.rvm/rubies/ruby-1.9.2-p290/bin/ruby" irb: "/home/devman/.rvm/rubies/ruby-1.9.2-p290/bin/irb" gem: "/home/devman/.rvm/rubies/ruby-1.9.2-p290/bin/gem" rake: "/home/devman/.rvm/gems/ruby-1.9.2-p290/bin/rake" environment: PATH: "/home/devman/.rvm/gems/ruby-1.9.2-p290/bin:/home/devman/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/devman/.rvm/rubies/ruby-1.9.2-p290/bin:/home/devman/.rvm/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/lib/jvm/java/bin:/usr/local/ant/bin:/home/devman/bin" GEM_HOME: "/home/devman/.rvm/gems/ruby-1.9.2-p290" GEM_PATH: "/home/devman/.rvm/gems/ruby-1.9.2-p290:/home/devman/.rvm/gems/ruby-1.9.2-p290@global" MY_RUBY_HOME: "/home/devman/.rvm/rubies/ruby-1.9.2-p290" IRBRC: "/home/devman/.rvm/rubies/ruby-1.9.2-p290/.irbrc" RUBYOPT: "" gemset: "" devman$ gem install passenger --pre # rvm 環境下なので userディレクトリにインストール
あれ、nginxもインストールされるのか。nginx(エンジンエックス、高速軽量で人気のWebサーバ)がスタンドアローンのwebサーバの役割を果たし、結局passenger本体はあくまでモジュールなのね。
ApacheにVirtualhostの設定を、reverse proxy仕様で追加する。
<VirtualHost *:80> ServerName app3.sample.com DocumentRoot /home/devman/public_html/words/public PassengerEnabled off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ </p>
起動スクリプトは、私は
/etc/rc.d/app3
をつくり、/etc/rc.local
に追加した。これで良かったのかな。停止とかはKillしよう。chmod +x /etc/rc.d/app3
を忘れないこと。起動スクリプト:/etc/rc.d/app3
#!/bin/sh su - devman -c 'cd public_html/app3;passenger start -a 127.0.0.1 -e development -p 3000 -d'開発環境で実行している。
これで、Apacheを再起動し、rails3のアプリケーションを起動すればよい。
devman$ sudo /etc/init.d/httpd restart devman$ cd public_html/app3 devman$ passenger start -a 127.0.0.1 -e development -p 3000 -d
リバースプロキシーは、高速化、キャッシュ・サーバ、負荷分散など応用が広いが、こういった使い方も出来るのですね。
0 件のコメント:
コメントを投稿