MySql, Ruby and Snow Leopard (yet another post)


umlaut_couch
The blogosphere is full of a lot of posts about this particular problem, but I thought I’d chime in with my own insights. This is evidenced by two errors. First, whenever you try to do any kind of rake db task:


rake aborted!
uninitialized constant MysqlCompat::MysqlRes

Second, you cannot install the Mysql Gem. missing libraries, or other errors, didn’t save them when I got them! Sorry.

Solution Part 1: Know Your Computer
I have an old MacBook2,1 with 64-bit core 2 duo processor. That means, it’s “x86_64” architecture. It is not “i386”. It took me a while to convince myself of this. I looked up under the Apple at the MacBook’s “about this Mac,” I read the Wiipedia site on the Mac series- FYI all kindsa nerdy details at the Model Specifications section.

Solution Part 2: Re-Install MySql & Gem
I finally got Ruby on Rails to register my MySql installed 64-bit software by doing the following:

  1. Check if there’s any running instances of MySQL
    > ps -ef | grep mysql
  2. Kill them if you find them:
    > sudo kill [insert pid]
  3. Delete the old MySql directories (if you have the Startup, go there and delete those. I didn’t.)
    >cd /usr/local
    >sudo rm mysql*
  4. Uninstall Ruby’s MySql gem.
    >sudo gem uninstall mysql
  5. I rebooted here. Not technically necessary, but it was advised somewhere, so I did it, and I think it’s a good idea.
  6. Download and install the MySql *for your architecture*.Mine is (x86_64)… dev.mysql.com/downloads/mysql.
  7. Install the gem with associated flags:
    >sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- 
           --with-mysql-dir=/usr/local/mysql 
           --with-mysql-lib=/usr/local/mysql/lib 
           --with-mysql-include=/usr/local/mysql/include 
           --with-mysql-config=/usr/local/mysql/include

    Note: remove the new line endings, it should all be on one line.

  8. Get the MySql server running –
    > cd /usr/local/mysql
    > sudo ./bin/mysqld_safe
    (Enter your password, if necessary)
    (Press Control-Z)
    > bg
    (Press Control-D or enter "exit" to exit the shell)
    
  9. To test, go back and run that rake task.

Troubleshooting

  • If you get an error about hash class detection, that’s an issue with 32-bit running on a 64-bit architecture. The 32-bit MySql and 32-bit ruby gem won’t basically work despite both being compatible with each other. This is in the library of gem data connection classes.
  • If you can’t compile the gem, that’s due to it not being able to find the classes in your MySQL installation- that’s why we’re sending it all of the paths in the command line gem build.
  • Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql::Error) that error is due to MySql server not running as a process on your Mac. So do that- instructions are above.
  • Did you like the gratuitous photo of my cat? Makes these tech posts more interesting!

    More Reading
    Ruby forum from 11/2009

    StackOverflow on the same issue
    More explanation re: archtypes on TechLiberty blog