2010-11-17

rubyを1.8.7から1.9.1にしてみたときのメモ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyが1.8.7で
railsが2.3.5でアプリを作ったアプリをRails3も出ているこのご時勢なので
ちょっとアップデートを試みました。

Rilas3にするのは大変そうな気がしたので、
まずは、railsを2.3.5から2.3.10にアップデート。
こちらはそんなに困らずにアップデートできました。

そしてrubyを1.8.7から1.9.1にアップデートするために
rvmをインストールして複数のバージョンを利用できるようにしました。

rubyを1.9.1にアップデートするには、以下の対応を行いました。
(1)日本語対応させるためのマジックコメント追加
テストを行うと
invalid multibyte char (US-ASCII)
みたいなエラーが出てテストができない状況だったので、
とりあえず各ファイルに以下のようなマジックコメントを追加しました。
# -*- encoding: UTF-8 -*-


(2)FasterCSVの利用をCSVに変更
CSVの処理を行う部分があり、FasterCSVを利用していたのですが
1.9にはFasterCSVが普通にCSVとして組み込まれているようなので
FasterCSVの部分をCSVに置き換えました。


(3)mysqlの接続アダプターの変更
テストを行うと
incompatible character encodings: ASCII-8BIT and UTF-8
みたいなのがたくさん出てきました。
マジックコメントを入れたので日本語対応が済んでいると思ったのですが、
ActiveRecordの結果がいまいちな感じでした。

実際調べてみまたところ、アクティブレコードの出力が確かにASCII-8BITになっていました。
#ファイルで適用されているエンコーディングを出力
p __ENCODING__
Encoding:UTF-8
#アクティブレコードで取得したレコードのエンコーディングを出力
p n[:aaa].encoding
Encoding:ASCII-8BIT
#念のためソースに記載した日本語のエンコーディングを確認
p "あああ".encoding
Encoding:UTF-8

ruby 1.8.7では
gem install mysql
としてmysql用のアダプターを入れていたのですが、どうもこれはだめなようで
ruby-mysql

mysql2
を使う必要があるようです。

単純に移行するならば
ruby-mysql
の方がちゃんと互換性があるようです。
使うときは、以下のように既存を削除して追加する必要があります。
gem uninstall mysql
gem install ruby-mysql

mysql2の方が速いらしいし、Rails3ではこれをつかうっぽいので、
こっちを使ってみることにしてみました。
使うときは、以下のように既存を削除して追加する必要があります。
gem uninstall mysql
gem install mysql2

そしてconfig/database.ymlのadapterを
adapter: mysql2
とする必要があります。

ちなみにnum_rowsを使って検索件数を取得していたのですが、
mysql2にはないのでcountに置き換えました。

だいたいこんな感じで1.9.1の対応ができました。

ちなみに1.9にするとスピードもあがるとのことなので1.8.7のときと1.9.1のときの同じテストを行ったときの時間を参考までに。

1.8.7 Finished in 270.402445 seconds
1.9.1 Finished in 218.353968929 seconds

確かに速くなっています。
コメントを投稿