Ruby、Ruby on Rails、Passenger(mod_rails)
今回はRuby周りのセットアップについて書きます。
Rubyとはオブジェクト指向スクリプト言語の一種です。
文法がシンプルで平易な反面、強力なテキスト処理など便利さも兼ね備えた言語です。
Ruby on Rails(以降 rails)とはそのRubyで書かれたWEBアプリケーションフレームワークで、
圧倒的な開発効率を実現する、現在最も注目されているOSS開発プロジェクトの一つです。
そしてPassengerとは別名mod_rails、つまりrailsをApache上で動かすApacheモジュールです。
railsは通常WEBrickと呼ばれるRubyで書かれたWEBサーバフレームワークを使用して起動します。
しかしRubyで書かれていることからも分かるように、
パフォーマンス面で問題があったり安定性に欠けていたりするのが実情です。
そこでこのPassengerを使ってrailsをApacheでハンドリングする訳です。
まずRuby(と開発環境)、rails、gem(Ruby製のモジュール管理ツール)をインストールします。
次にRuby製のビルドツールrake(makeみたいのもの)をインストールします。
$ sudo apt-get install ruby ruby-dev rubygems rails
でこのままPassengerもインストール・・と思ったら
$ sudo gem install rake
とエラーが出ました。。。
$ sudo gem install passengerERROR: Error installing passenger:
ERROR: Failed to build gem native extension./usr/bin/ruby1.8 extconf.rb install passenger
creating Makefile
make
sh: make: not found
Gem files will remain installed in /var/lib/gems/1.8/gems/fastthread-1.0.7 for inspection
エラーを見る限りPassengerのインストール時に同時にインストールされるfastthreadのビルドに失敗しているみたいです。
そこで一度手動でビルドして、詳しいエラーを見てみようと。。
どうやらechoeのバージョンが問題っぽい。なので、
$ cd /var/lib/gems/1.8/gems/fastthread-1.0.7
$ sudo rakerake aborted!
Could not find RubyGem echoe (>= 2.7.11)
これで再び
$ sudo gem install echoe
またエラーが出ました。
$ cd /var/lib/gems/1.8/gems/fastthread-1.0.7
$ sudo rakerake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -Ilib:ext:bin:test "/usr/...]
トレースとかしてみて調べましたが、結局分からずでfastthreadによるエラーを色々ググってみたら
build-essentialとやらが無いとエラーが出るとかなんとかっていう一文を発見。早速
そして
$ sudo apt-get install build-essential
!成功 そして再び
$ sudo rake
無事インストール完了しました。
$ sudo gem install passenger
次にpassengerのApacheモジュールを組み込む部分をインストールします。
で見つからなかったので探してみました。
$ which passenger-install-apache2-module
パスが通っていなかっただけみたいなので
$ sudo find / -name passenger-install-apache2-module
/var/lib/gems/1.8/bin/passenger-install-apache2-module
これで後は依存関係にあるモジュールで怒られるくらいなのでaptなりyumなりでちゃちゃっと解消すれば
$ sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module
インストール完了!
Apache設定ファイルのVirtualHostディレクティブに、
インストール時に最後に出てくる記述例を参考に追記するとApache上でrailsが動くようになります。
久々に手間取ったインストールでしたが、なんとか無事終了しました。