読者です 読者をやめる 読者になる 読者になる

RailsでMySQL/Rubyが動いてなかった

Ruby

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でも、もう試す気にはならんので後は任せた(誰)。