社内SNS SKIPアップデートでハマったことを調べたの

SKIPというより、Railsアプリケーションのアップデートだと思う。
いつもはまるところがあったので、ちょっと調べてみた内容を共有。

can’t activate , already activated locale-2.0.5

gemのバージョンがあってないときに出るらしい。今はいっているgemを見てみると・・・

https://gist.github.com/daipresents/e9008913f81a703151c899828fb203bf.js?file=gistfile1.txt

2.0.5はそろっているけど、2.0.4がないのが怪しい。よって入れてみる。

https://gist.github.com/daipresents/e9008913f81a703151c899828fb203bf.js?file=gistfile2.txt

すると進んだ。

uninitialized constant MysqlCompat::MysqlRes

migrateしたときに、様々な状況でこのメッセージが出る。Redmineのmigrateでも経験あり。

わかったのが、「gem install mysql」をたたくと20100404だと2.8.1がインストールされるが、それがうまくビルドできない場合があるみたい。その時は、gemのディレクトリに入って、自分makeして対応したのだけれど、昔のバージョン(2.7)はすんなりインストールできたので、「gem uninstall mysql -v 2.8.1」して「gem install gem install mysql -v 2.7」をたたくことにした。
すると以下のように怒られる。

https://gist.github.com/daipresents/e9008913f81a703151c899828fb203bf.js?file=gistfile3.txt

Rails2.2でmysql.rbドライバーが消えたらしい。
よって、「gem install mysql」してねっていうけどそれやったら怒られるんだってばさ・・・。
どうもmysql.soからlibmysqlclient.soが見えないという意味らしいの
で、以下を行う。(参考:ref:http://www.ruby-forum.com/topic/98177)

https://gist.github.com/daipresents/e9008913f81a703151c899828fb203bf.js?file=gistfile4.txt

これをやったあとにgem installすればうまくいった。

まとめ。
Railsのアップデートや様々なgemの共存は大変。
Railsアプリを作るときはgemのバージョンを固定して設定したほうがよさそうだと思ったのです。