Ruby on Rails

Riding Rails: Upgrading to Snow LeopardにおいてMatt Aimonetti氏が、Mac OS X Snow Leopardにアップグレードした場合に、Ruby on Railsの環境もそれに合わせてアップグレードする必要があることを説明している。Snow Leopardではハードウェアが対応していれば64ビットモードでアプリケーションが動作するようになる。Rubyで開発されたライブラリやアプリケーションはこの影響を受けないが、Cエクステンションを32ビットモードのみでビルドした場合には、この部分が問題になる。

紹介されているアップグレード手順は次のとおり。

開発ツールのインストール

Snow LeopardのDVDから"Optional Installs"を選択して、デフォルトオプションのまま"Xcode.mpkg"をインストール。

Passengerインストール

Passengerをインストールして、Apacheモジュールのコンパイルを実施する。/etc/apache2/httpd.confの該当するモジュール読み込み設定部分を編集。

$ sudo gem install -r passenger
$ sudo passenger-install-apache2-module
PassengerのインストールとApacheモジュールのビルド
LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.4
PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
/etc/apache2/httpd.confファイルのモジュール読み込み部分を追加または編集

MySQLインストール

おかしな挙動を避けるあために64ビット版のMySQLへのアップグレードが強く推奨される。MySQLサーバが動作している場合は停止させ、MySQL 5.1 GA Downloadsから「Mac OS X 10.5 (x86_64)」をダウンロード。ディスクイメージを開いたら、デフォルトのオプションのまま、まず「mysql-5.1.37-osx10.5-x86_64.pkg」をインストール。次に、同じくデフォルトオプションのまま「MySQLStartupItem.pkg」をインストールし、さらに「MySQL.prefPane」をダブルクリック。選択を求められたら既存の設定パネルを置き換える方を選択するようにと説明がある。ここまで作業したらディスクイメージをアンマウントする。

LeopardからSnow Leopardにアップグレードした場合、mysql gemが32ビットモードでコンパイルされているため、再ビルドの必要がある。しかしこの部分は若干状況が複雑だという。Snow Leopardにおいては、Cエクステンションをインストールする場合にはgemはi386 (32ビット)とx86_64 (64ビット)の両方のエクステンションをビルドしようとするものの、mysql.comから提供されているバイナリはユニバーサルではないためこの方法はうまくいかないという。64ビットモードのみをビルドするように次のように強制する必要があると説明されている。

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
mysql gemを64ビットモードでビルドする方法

なお、ほかのgemをビルドする場合にはARCHFLAGSは設定すべきではないという注意書きがある。

MacPortsインストール

MacPortsを使っている場合、Leopardでビルドされたライブラリを使っているのであればリコンパイルする必要がある。

$ sudo port selfupdate
$ sudo port sync
$ sudo port upgrade --force installed
MacPortsでインストールしたアプリケーションの更新

なおRiding Rails: Upgrading to Snow Leopardでは説明されていないが、Snow LoepardにアップグレードすることでそもそもMacPortsが動作しなくなるケースもある。この場合、MacPortsとそこからインストールされたアプリケーションやライブラリをいったんすべて削除し、Snow Leopardに対応したMacPortsをインストールして、必要になるアプリやライブラリをすべてインストールしなおせばいい。

ほかのgemをチェック

Cエクステンションを使っているgemはリコンパイルの必要がある。gist: 178178 - GitHubのスクリプトを取得して、リコンパイルが必要になっているgemを正確に見付だし、それらをリコンパイルする。

Snow LeopardにバンドルされているRubyはRuby 1.8.6ではなくRuby 1.8.7へアップグレードされている。しかしこれは問題にならないという。Ruby on Railsはすでに長いことRuby 1.8.7で動作している。