MacのRailsを2.2にアップデートしたらRailsが動かなくなってしまった。
LoadError (dlsym(0x1445a40, Init_mysql): symbol not found - /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle): /opt/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require'
MySQL/Rubyのロードでコケている。Rails 2.1の時はRubyで書かれたRails付属のmysql接続ライブラリで接続していたが、2.2から付属しなくなったため起動しなくなったようだ。今までCで書かれたMySQL/Rubyライブラリで接続しているつもりが実はそうではなかったらしい…
さて、このインストールしたつもりのMySQL/Rubyが使われてなかった理由が分からないのでググってみる。
mysql-5.0.67-osx10.5-x86.dmg
mysql-5.0.67-osx10.5-x86_64.dmg
Both work fine on my MacBook but the mysql gem wants the '_x86' version, not the '_x86_64'
このページによるとx86_64版のMySQLはだめ、と書いてある。確かに自分のMacにはx86_64版が入っている。x86_64でも上手くMySQL/Rubyをインストールできる方法があるのかもしれないが、とりあえずこのページの記述に従ってx86アーキテクチャのMySQLをインストールしなおした。
MySQLをインストールしなおして、gemで再インストール
$ sudo gem uninstall mysql $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
試しにロードしてみる
$ irb irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'mysql' => true irb(main):003:0>
どうやら正しく動作してそうだ。dataを入れ直すとRailsも無事に動作。
ところでRailsのconfig/database.ymlを見ると…
# On Mac OS X Leopard: # sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config # This sets the ARCHFLAGS environment variable to your native architecture
と書いてあるわけだが、もしかしてARCHFLAGSを設定すればサーバのアーキテクチャに関係なく動いたのだろうか。灯台下暗しwwでも、もう試す気にはならんので後は任せた(誰)。