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
% 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
http://rack.rubyforge.org/

Route 477 – 5分でわかるRack , シュレーディンガーの猫たち
http://route477.net/d/?date=20080716

Greenbear Laboratory – Rack日本語リファレンス
http://route477.net/w/?RackReferenceJa

Passenger

Overview ― Phusion Passenger^(TM) (a.k.a. mod_rails / mod_rack)
http://www.modrails.com/

RVM: Ruby Version Manager – Passenger – Come on, ride the train, hey, ride it, woo woo…
http://rvm.beginrescueend.com/integration/passenger/

Redmine.JP | Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
http://redmine.jp/tech_note/apache-passenger/

Passenger はどのユーザーアカウントで動くのか? – yuum3のお仕事日記 (twitterIDは@yuumi3です)
http://d.hatena.ne.jp/yuum3/20090312/1236871330

Apache2 + Ruby + Rack + mod_passenger (3) – 今日調べたことまとめ
http://d.hatena.ne.jp/tks_period/20090516/p3

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください