Ruby 2.0 で Passenger を動かしてみた
Ruby 2.0.0-p0 がリリースされましたね。
ということで、早速インストールして Passenger で Rails の簡単なサンプルアプリを動かすところまでやってみました。
準備
まずは必要なパッケージをインストールします。
README などに特に記載はないようだったので、取りあえず Ruby 1.9 の時必要だったものを一通り入れてみました。
# yum install -y gcc gcc-c++ make wget # yum install -y zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel # yum install -y http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/libyaml-0.1.3-1.el6.x86_64.rpm \ http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/libyaml-devel-0.1.3-1.el6.x86_64.rpm
minimal で入れた CentOS 6 だと wget も入っていないので入れています。
次に簡単にアンインストールできるようにするために paco をインストールします。
# cd /usr/local/src/ # wget http://jaist.dl.sourceforge.net/project/paco/paco/2.0.9/paco-2.0.9.tar.gz # tar xzf ./paco-2.0.9.tar.gz # cd ./paco-2.0.9 # ./configure --disable-gpaco # make && make install && make logme
これで準備は OK です。
Ruby 2.0.0-p0 のインストール
といっても Ruby 1.9 の時と同じで問題なく入りました。
# cd /usr/local/src/ # wget ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz # tar xzf ruby-2.0.0-p0.tar.gz # cd ruby-2.0.0-p0 # ./configure # make # paco -D make install
バージョンを確認します。
# ruby -v ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
無事 2.0.0p0 がインストールされたようです。
RubyGems のバージョンも確認してみます。
# gem -v
2.0.0
gem のバージョンも上がっていますね。
Passenger のインストール
今回は Apache2 で試すので httpd、httpd-devel をインストールしておきます。
# yum install -y httpd httpd-devel
普通に gem から入れられる passenger 3.0.19 だと passenger-install-apache2-module 実行時に「cannot load such file -- rubygems/builder」が発生してしまいました。
# gem i passenger --no-rdoc --no-ri # passenger-install-apache2-module ・ ・ ・ -------------------------------------------- Compiling and installing Apache 2 module... cd /usr/local/lib/ruby/gems/2.0.0/gems/passenger-3.0.19 /usr/local/bin/ruby /usr/local/bin/rake apache2:clean apache2 RELEASE=yes # /usr/local/bin/ruby /usr/local/bin/rake apache2:clean apache2 RELEASE=yes rake aborted! cannot load such file -- rubygems/builder (See full trace by running task with --trace) ・ ・ ・
探してみたところ、以下にパッチを投稿されている方がいました。
passenger-install-apache2-module doesn't work on ruby 2.0 by id774 · Pull Request #71 · FooBarWidget/passenger · GitHub
https://github.com/FooBarWidget/passenger/pull/71
というわけで Git から落として上記のパッチを適用してインストールしてみます。
まずは Git をインストール。
# yum install -y git
Git が入ったら以下のようにしてパッチ適用済みの gem を作成し、インストールします。
# cd /usr/local/src/ # git clone git://github.com/FooBarWidget/passenger.git # cd passenger/ # wget https://raw.github.com/id774/passenger/39cf482d1f2c3118021076362bd3f0a41750faa6/build/gempackagetask.rb -O build/gempackagetask.rb # rake package # gem install --local pkg/passenger-3.9.3.rc1.gem
再度 passenger-install-apache2-module を試してみると、確かに先ほどのエラーは解消したのですが、今度は何度やっても「Checking for Rake Found: no」が消えてくれません。
Rake をアップデートしても駄目。
これは私の環境固有かも知れませんが、結局解消法はよくわからず・・・。
仕方がないので、以下のように直接 Rake のタスクを実行しました。
# cd /usr/local/lib/ruby/gems/2.0.0/gems/passenger-3.9.3.rc1 # rake apache2
これでビルドが成功し、mod_passenger.so が生成されたようです。
Passenger の動作確認
それでは Passenger が正常に動くか試してみます。
まずは Apache に読み込ませるための設定を追加します。
# vi /etc/httpd/conf.d/passenger.conf
内容は以下のようになります。
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-3.9.3.rc1/libout/apache2/mod_passenger.so PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-3.9.3.rc1 PassengerRuby /usr/local/bin/ruby
rake apache2 でビルドした場合、 passenger-install-apache2-module と異なり生成されたモジュールのパスなどが表示されないため、その辺りは自分で調べる必要があります。
Apache 側にちゃんとモジュールとして認識されたかを確認します。
# apachectl -M | grep passenger passenger_module (shared) Syntax OK
問題なさそうですね。
次に実際に動かしてみるためサンプルアプリケーションを作成します。
必要なライブラリをインストールします。
# yum install -y sqlite3-devel # gem i rails --no-rdoc --no-ri # gem i bundler -v '1.3.0.pre' --no-rdoc --no-ri
アプリケーションを作成します。
ここでは /var/apps というディレクトリを作成し、その下に作ることにしました。
# mkdir /var/apps # cd /var/apps/ # rails new example --skip-bundle
作成したら Gemfile を編集します。
# cd example/ # vi Gemfile
therubyracer のコメントアウトを解除します。
gem 'therubyracer', :platforms => :ruby
bundle install を実行。
# bundle install --path=vendor/bundle
bundle のインストールが完了したら scaffold を生成して db:maigrate や assets:precompile を実行します。
# rails g scaffold post name:string title:string content:text deleted_at:datetime lock_version:integer # RAILS_ENV=production bundle exec rake db:create # RAILS_ENV=production bundle exec rake db:migrate # RAILS_ENV=production bundle exec rake assets:precompile
ログが出ないなどのトラブルは面倒なので一旦ディレクトリ以下の権限は全部 apache ユーザに設定。
# chown -R apache:apache /var/apps/example/
Apache の設定ファイルを編集します。
# vi /etc/httpd/conf/httpd.conf
DocumentRoot を作成したアプリケーションの public ディレクトリに変更しました。
#DocumentRoot "/var/www/html" DocumentRoot "/var/apps/example/public"
完了したら Apache を起動します。
# apachectl configtest Syntax OK # service httpd start
Apache が起動したらブラウザから以下の URL でアプリケーションの動作を確認します。
http://yourserver/posts
問題なく動作していれば完了です。
Passenger のインストールこそまだ面倒ですが、この程度のサンプルアプリであれば Ruby 2.0 でも全然問題なく動きました。
他の gem の互換性なども気になるので暫くはいろいろと触ってみたいと思います。