RVM環境でRackとPassengerを動かす
RackとPassengerを初めて動かしたので、前回に引き続き作業メモ。
Rack
こちらの記事が簡潔にして必要十分にまとまっているので写経してみた。
インストール
% gem install rack
実行
拡張子を.ruにしたRubyのコードを渡せばサーバとして動いてくれる。callメソッドを持ったクラスをrunメソッドに渡してやればいい。
hello.ru
class Hello
def call(env)
[200, {'Content-Type' => 'text/plain'}, ['Hello, Rack!']]
end
end
run Hello.new
run Hello.new
% rackup hello.ru
[2010-06-17 20:26:14] INFO WEBrick 1.3.1
[2010-06-17 20:26:14] INFO ruby 1.9.1 (2010-01-10) [i686-linux]
[2010-06-17 20:26:14] INFO WEBrick::HTTPServer#start: pid=11096 port=9292
これで9292番ポートで待ち受けしている状態。http://localhost:9292/ にアクセスすると、ブラウザには「Hello, Rack!」と表示されるはず。rackupしているコンソールにはログが出る。
192.168.*.* - - [17/Jun/2010 20:26:18] "GET / HTTP/1.1" 200 - 0.0010
…という具合。
理屈はこの辺にあるので読んでおくと黒魔術化を防げるのではないだろうか。
Passenger
Phusion PassengerはRuby on RailsをApache / Nginxで動かすためのモジュール。ドメイン名からもわかるとおり、もともとは「mod_rails」というプロダクト。mod_perlとかmod_phpに対してなら「mod_ruby」にすればいいのに…と思ったら、別のプロダクトとして存在するのか。
インストール
「passenger ruby」でググると日本語の情報ではここがトップ(2010-06-17)なのだが、ちょっと落ち着く必要がある。なぜならインストールしようとしている環境は、前回構築したRVMのRubyだからだ。
RVMの公式サイトにちゃーんと手順が乗っているので、きちんと読みながら作業しよう。
# Passengerで使うRubyを選択
% rvm 1.9.1 --passenger
# Passengerで使うRubyに切り替え
% rvm 1.9.1
# gemをインストール
% gem install passenger
# apache用モジュールをインストール
% rvmsudo passenger-install-apache2-module
最後のコマンドは対話式に進む。「この設定を書き足すんだよ」と教えてくれてるので、どこかにコピペしておく。
設定
apacheの設定ファイルにextra/passenger.confが追加されているので、さっきコピペした設定をもとに編集する。
PassengerDefaultUser {user_name}
PassengerUserSwitching off
LoadModule passenger_module /home/{user_name}/.rvm/gems/ruby-1.9.1-p378/gems/passenger-2.2.14/ext/apache2/mod_passenger.so
PassengerRoot /home/{user_name}/.rvm/gems/ruby-1.9.1-p378/gems/passenger-2.2.14
PassengerRuby /home/{user_name}/.rvm/bin/passenger_ruby
1行目はPassengerが動作するユーザアカウントを指定する。理屈はこの辺に。RVMはユーザのホームにRubyをインストールしているので、RVMをインストールしたユーザ / apacheが動作するユーザ / Passengerが動作するユーザを揃えておくのがよいだろう。
実行
こちらを参考に、プロジェクトディレクトリを作り、httpd.confを設定する。
ディレクトリ構成
% cd /path/to/project
% tree ../
../
`-- project
|-- config.ru
|-- public
`-- tmp
httpd.conf
<VirtualHost *:80>
ServerName project.example.com
DocumentRoot /path/to/project/public
</VirtualHost>
config.ru
run proc{|env| [200, {'Content-Type'=>'text/plain'}, ['Hello, Passenger!']]}
http://project.example.com/ にアクセスして「Hello, Passenger!」と表示されたらok。
まとめ
これでRuby + apacheでwebアプリを動かす準備が整った。あとはRailsなりSinatraなりでバリバリ開発していこう。
Links
Rack
- Rack: a Ruby Webserver Interface
- Route 477 – 5分でわかるRack , シュレーディンガーの猫たち
- Greenbear Laboratory – Rack日本語リファレンス
Passenger
- Overview ― Phusion Passenger^(TM) (a.k.a. mod_rails / mod_rack)
- RVM: Ruby Version Manager – Passenger – Come on, ride the train, hey, ride it, woo woo…
- Redmine.JP | Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
- Passenger はどのユーザーアカウントで動くのか? – yuum3のお仕事日記 (twitterIDは@yuumi3です)
- Apache2 + Ruby + Rack + mod_passenger (3) – 今日調べたことまとめ