Ruby2.0にアップグレードしてつまづいたこと
Ruby 1.9.3 / Rails 3.2.x でアプリを開発しています。
このたびRuby 2.0がめでたくリリースされたのでアップグレードしてみました。
で、ちょいちょいつまづいたことをメモしておきます。
つまづき:RVM on Mac OS Xでインストールエラー
まずRuby2.0のインストールにつまづきました。 ビルドで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モジュールがビルドできない。
ビルド中にこんなのを吐いて落ちました。
|
対策:Stableな3.0.19はRuby2.0に対応していないようです。
|
で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