Ruby2.0にアップグレードしてつまづいたこと

Ruby 1.9.3 / Rails 3.2.x でアプリを開発しています。

このたびRuby 2.0がめでたくリリースされたのでアップグレードしてみました。

で、ちょいちょいつまづいたことをメモしておきます。

つまづき:RVM on Mac OS Xでインストールエラー

まずRuby2.0のインストールにつまづきました。 ビルドでopensslがほにゃららのエラーがでてこけました。

対策: 下記のとおり。

$ brew update
$ brew install openssl
$ rvm get head
$ rvm install ruby-2.0.0 --skip-openssl --with-opt-dir="`brew --prefix openssl`"

(参考) Installing Ruby 2.0.0-preview1 with RVM on OS X                  

つまづき:iconvがない。

iconvが標準でついてこなくなりました。

対策:String#encodeで置き換える。

つまづき:respond_to?の仕様が変わった。

protectedメソッドにrespond_to?するとfalseが返ってくるようになりました。 私はテストがfailしたことがきっかけでこれが分かったのですが、最初はなにが悪いのかわからなくて混乱しました。

対策:Ruby1.9系と互換を保つにはprotected_to?の第二引数にtrueを指定する。

true指定でprotected/privateメソッドもrespondableになる。

(参考) PROTECTED METHODS AND RUBY 2.0

つまづき: PassengerのApacheモジュールがビルドできない。

ビルド中にこんなのを吐いて落ちました。

cannot load such file -- rubygems/builder

対策:Stableな3.0.19はRuby2.0に対応していないようです。

$ gem i passenger --pre

で4.0.0 RCのPassegerをインストールしてビルドします。

(参考) passenger-install-apache2-module doesn’t work on ruby 2.0

あと、この4.0.0 RCのPassegerではRails.rootにconfig.ruがないとRails 1 or Rails 2と見なされて起動しません。 こんなエラーメッセージが出ました。

This application is a Rails 3 application, but it was wrongly detected as a Rails 1 or Rails 2 application.

This is probably a bug in Phusion Passenger, so please report it

なのでconfig.ruをお忘れなく。

(参考) Passenger 3.9.1.beta incorrectly detects Redmine 2.2.1 as Rails 1/2 app

Comments