Passengerを入れる

そろそろ落ち着いてきたころかなと思って、Passenger(mod_rails) を Ubuntu に入れてみました。

インストール

インストールこれだけです。

$ s gem install passenger
$ s passenger-install-apache2-module

だらだらとしたインストール

例によって例の如く、失敗を含めたインストール経過はこんな感じです。いきなり passenger のインストールから始めてしまいます。

$ s gem install passenger
Install required dependency fastthread? [Yn]  Y
Select which gem to install for your platform (i486-linux)
 1. fastthread 1.0.1 (mswin32)
 2. fastthread 1.0.1 (ruby)
 3. fastthread 1.0.1 (i386-mswin32)
 4. Skip this gem
 5. Cancel installation
 > 2
Successfully installed passenger-1.0.5
Successfully installed fastthread-1.0.1
Installing ri documentation for passenger-1.0.5...
Installing ri documentation for fastthread-1.0.1...
No definition for dummy_dump
No definition for rb_queue_marshal_load
No definition for rb_queue_marshal_dump
Installing RDoc documentation for passenger-1.0.5...
Installing RDoc documentation for fastthread-1.0.1...
/usr/lib/ruby/1.8/rdoc/generators/template/html/html.rb:25: warning: already initialized constant FONTS
/usr/lib/ruby/1.8/rdoc/generators/template/html/html.rb:235: warning: already initialized constant STYLE

なにやら、warning が出てますが、インストールはちゃんとできてそうです。次に passenger-install-apache2-module を実行すると足りないものを教えてくれるはず。

$ s passenger-install-apache2-module
sudo: passenger-install-apache2-module: command not found

いきなり「そんなコマンドない!」で蹴られました。おかしいな、やっぱさっきの warning のせいで passenger がちゃんと入らなかったのかもしれない。こういうときは、uninstall してからやり直しだ。

$ s gem uninstall passenger
Successfully uninstalled passenger version 1.0.5
Remove executables and scripts for
'passenger-spawn-server, passenger-install-apache2-module, passenger-config, passenger-memory-stats, passenger-make-enterprisey' in addition to the gem? [Yn]  Y
Removing passenger-spawn-server
Removing passenger-install-apache2-module
Removing passenger-config
Removing passenger-memory-stats
Removing passenger-make-enterprisey

れれ、passenger-install-apache2-module スクリプトも削除されるよって言ってるってことは、やっぱり入ってんじゃん。2回目はなにも聞かれずインストールOK。

$ s gem install passenger
Successfully installed passenger-1.0.5
Installing ri documentation for passenger-1.0.5...
Installing RDoc documentation for passenger-1.0.5...

passenger-install-apache2-module を探してみる。

$ s find / -name passenger-install-apache2-module
/var/lib/gems/1.8/gems/passenger-1.0.5/bin/passenger-install-apache2-module
/var/lib/gems/1.8/bin/passenger-install-apache2-module

やっぱ、あるな。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

これが原因か。/var/lib/gems/1.8/bin にパスが通ってないからか。でもここには rails とか rake なんかが入ってて、いままで普通に使ってたからパスが通ってないなんてちょっと考えられないけどなぁ。なんかやって PATHを初期化しちゃったかな。とりあえず、PATHを追加しておく。

$ export PATH=$PATH:/var/lib/gems/1.8/bin

で、passenger-install-apache2-module に再チャレンジ。

$ s passenger-install-apache2-module
sudo: passenger-install-apache2-module: command not found

ああ、こっちの PATH を変えても、sudo の PATH は変わらないのか(s printenv で確認)。
「sudo の PATH はセキュリティ上変えられない」という意見や「いや、root でログインして ~/.bash_profile に書けば?」とかググルといろいろあったんだけど、どれもうまくいかず。だいたい、端末からの root ログインは禁止してるし。ということで、今回1回のみのことなのでフルパスで指定することに。何回も使うスクリプトだったらシンボリックリンク張るけどね。

$ s /var/lib/gems/1.8/bin/passenger-install-apache2-module
Welcome to the Passenger Apache 2 module installer, v1.0.5.
This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.
Here's what you can expect from the installation process:
 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.
Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.
Press Enter to continue, or Ctrl-C to abort.
1 ← ここは 1を選択
Checking for required software...
 * GNU C++ compiler... not found
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... not found
 * Apache 2... found at /usr/sbin/apache2
 * Apache 2 development headers... not found
 * Apache Portable Runtime (APR) development headers... found
 * fastthread... found
Some required software is not installed.
But don't worry, this installer will tell you how to install them.
Press Enter to continue, or Ctrl-C to abort.
                                                                                      • -
Installation instructions for required software * To install GNU C++ compiler: Please run apt-get install build-essential as root. * To install Rake: Please install RubyGems first, then run gem install rake * To install Apache 2 development headers: Please run apt-get install apache2-prefork-dev as root.

「GNU C++ compiler」と「Rake」、「Apache 2 development headers」がないって教えてくれてるんだけど、「Rake」はパスが通ってないだけであるので、シンボリックリンクを張ることにして、他の2つを入れることにする。

$ s apt-get install build-essential
取得:1 http://jp.archive.ubuntu.com gutsy/main libstdc++6-4.1-dev 4.1.2-16ubuntu2 [1129kB]
取得:2 http://jp.archive.ubuntu.com gutsy/main g++-4.1 4.1.2-16ubuntu2 [2600kB]
取得:3 http://jp.archive.ubuntu.com gutsy/main g++ 4:4.1.2-9ubuntu2 [1440B]
取得:4 http://jp.archive.ubuntu.com gutsy/main patch 2.5.9-4 [95.6kB]
取得:5 http://jp.archive.ubuntu.com gutsy/main dpkg-dev 1.14.5ubuntu16 [162kB]
取得:6 http://jp.archive.ubuntu.com gutsy/main build-essential 11.3ubuntu1 [7066B]
未選択パッケージ libstdc++6-4.1-dev を選択しています。
未選択パッケージ g++-4.1 を選択しています。
未選択パッケージ g++ を選択しています。
未選択パッケージ patch を選択しています。
未選択パッケージ dpkg-dev を選択しています。
未選択パッケージ build-essential を選択しています。
$ s ln -s /var/lib/gems/1.8/bin/rake /usr/bin/rake
$ s apt-get install apache2-prefork-dev
取得:1 http://jp.archive.ubuntu.com gutsy/main libldap2-dev 2.1.30-13.4 [227kB]
取得:2 http://jp.archive.ubuntu.com gutsy/main libexpat1-dev 1.95.8-4ubuntu1 [129kB]
取得:3 http://jp.archive.ubuntu.com gutsy-updates/main libdb4.4-dev 4.4.20-8.1ubuntu3.1 [546kB]
取得:4 http://jp.archive.ubuntu.com gutsy-updates/main libpcrecpp0 7.4-0ubuntu0.7.10.2 [91.0kB]
取得:5 http://jp.archive.ubuntu.com gutsy-updates/main libpcre3-dev 7.4-0ubuntu0.7.10.2 [251kB]
取得:6 http://jp.archive.ubuntu.com gutsy-updates/main uuid-dev 1.2-1.40.2-1ubuntu1.1 [49.6kB]
取得:7 http://jp.archive.ubuntu.com gutsy/main libapr1-dev 1.2.7-8.2ubuntu1 [337kB]
取得:8 http://jp.archive.ubuntu.com gutsy/main zlib1g-dev 1:1.2.3.3.dfsg-5ubuntu2 [160kB]
取得:9 http://jp.archive.ubuntu.com gutsy-updates/main libkadm55 1.6.dfsg.1-7ubuntu0.1 [148kB]
取得:10 http://jp.archive.ubuntu.com gutsy-updates/main comerr-dev 2.1-1.40.2-1ubuntu1.1 [40.6kB]
取得:11 http://jp.archive.ubuntu.com gutsy-updates/main libkrb5-dev 1.6.dfsg.1-7ubuntu0.1 [88.6kB]
取得:12 http://jp.archive.ubuntu.com gutsy-updates/main libpq-dev 8.2.7-0ubuntu0.7.10 [347kB]
取得:13 http://jp.archive.ubuntu.com gutsy/main libaprutil1-dev 1.2.7+dfsg-2build1 [117kB]
取得:14 http://jp.archive.ubuntu.com gutsy-updates/main apache2-prefork-dev 2.2.4-3ubuntu0.1 [410kB]
取得:15 http://jp.archive.ubuntu.com gutsy-updates/main libssl0.9.8 0.9.8e-5ubuntu3.2 [2825kB]
取得:16 http://jp.archive.ubuntu.com gutsy-updates/main libssl-dev 0.9.8e-5ubuntu3.2 [1943kB]
未選択パッケージ libldap2-dev を選択しています。
未選択パッケージ libexpat1-dev を選択しています。
未選択パッケージ libdb4.4-dev を選択しています。
未選択パッケージ libpcrecpp0 を選択しています。
未選択パッケージ libpcre3-dev を選択しています。
未選択パッケージ uuid-dev を選択しています。
未選択パッケージ libapr1-dev を選択しています。
未選択パッケージ zlib1g-dev を選択しています。
未選択パッケージ libssl-dev を選択しています。
未選択パッケージ libkadm55 を選択しています。
未選択パッケージ comerr-dev を選択しています。
未選択パッケージ libkrb5-dev を選択しています。
未選択パッケージ libpq-dev を選択しています。
未選択パッケージ libaprutil1-dev を選択しています。
未選択パッケージ apache2-prefork-dev を選択しています。

これでもう1回 passenger-install-apache2-module をやってみる。

$ s /var/lib/gems/1.8/bin/passenger-install-apache2-module
Checking for required software...
 * GNU C++ compiler... found at /usr/bin/g++
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... found at /usr/bin/rake
 * Apache 2... found at /usr/sbin/apache2
 * Apache 2 development headers... found at /usr/bin/apxs2
 * Apache Portable Runtime (APR) development headers... found at /usr/bin/apr-1-config
 * fastthread... found
                                                                                      • -
The Apache 2 module was successfully installed. Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so RailsSpawnServer /var/lib/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server RailsRuby /usr/bin/ruby1.8 After you restart Apache, you are ready to deploy any number of Ruby on Rails applications on Apache, without any further Ruby on Rails-specific configuration!
                                                                                      • -
Deploying a Ruby on Rails application: an example Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host to your Apache configuration file, and set its DocumentRoot to /somewhere/public, like this: ServerName www.yourhost.com DocumentRoot /somewhere/public

で、OK。あとはここに書いてある LoadModule 定義を /etc/apache2/httpd.conf に書くだけ。の指定は元々そういう風になってた。
あとはパラメータなどの調整が必要。

参考

Passengerの導入関係はいろいろあるのでどこを参考ということはないですが、以下にいくつかあげておきます。

  1. 最初に参考にしたのがこちら(→http://rails20.jp/2008/04/passenger/)でしょうか。わかりやすいです。
  2. こちら(→Passenger (mod_rails for Apache) を使ってRedmineを動かしてみたよ! - 元RX-7乗りの適当な日々)もかなり初期の段階から参考にさせていただいてます。
  3. こちら(→Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用)もよくまとまっていてわかりやすいです。
  4. こちら(→大徳日記 » mod_rails試してみました。)はバーチャルホストでのプロセスについての記述があります。
  5. こちら(→Passenger (mod_rails) を入れてみた | ネコの箱舟 ~Ark the Cats~)には入れたあとのルーティングの例がいくつかあります。
  6. http://d.hatena.ne.jp/koush/20080419/1208569776
  7. http://bitmap.dyndns.org/blog/archives/001551.html
  8. http://doruby.kbmj.com/yoppi_on_rails/20080417/Passenger__mod_rails_for_apache_
  9. http://labs.zsrv.net/content/view/58/44/
  10. http://brass.to/blog/mod_rails_memory.html