Hey, I want to say thanks for pointing me in the right direction!
Rather than completely start with new files, I new the stuff was there, it just needed a little massaging.
Here is the account I kept of what I did to fix the problem. It's not the most graceful thing, but it's not bad:
Part 1: Configuration You Never Knew You Had To Do
mysql gem manual setup for OS X 10.4.9 (probably any 10.4.x)
I've got Ruby 1.8.4 installed in /usr/local/bin
(I fixed the bad factory install long ago)
My mysql gem 2.7 is installed in the following directory:
/usr/local/lib/ruby/gems/1.8/gems/mysql-2.7
My MySQL is installed in:
/usr/local/mysql/
(actually in:
/usr/local
I have a symlink to the full name of the install to simplify the path name. I got this idea from the way other software is often installed. (such as the Entropy PHP distro))
You should navigate (in Terminal, using UNIX command cd) your way to each of those directories in separate terminal windows. This should keep you ready to check stuff. To open them as finder windows (much easier to browse) just use OS X's open command.
open /path/name/here
So, on my machine
open /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7
The terminal window open to the mysql gem's directory is where you will type all of these commands.
extconf.rb has following options:
--with-mysql-include=dir
MySQL header file directory. Default is /usr/local/include.
Mine would be
/usr/local/mysql/include
So,
--with-mysql-include=/usr/local/mysql/include
--with-mysql-lib=dir
MySQL library directory. Default is /usr/local/lib.
Mine would be
/usr/local/mysql/lib
so,
--with-mysql-lib=/usr/local/mysql/lib
--with-mysql-dir=dir
Same as --with-mysql-include=dir/include, --with-mysql-lib=dir/lib.
Mine would be
/usr/local/mysql
So, in theory, I could simply use only :
--with-mysql-dir=/usr/local/mysql
--with-mysql-config[=/path/to/mysql_config]
Get compile-parameter from mysql_config command.
Mine would be
/usr/local/mysql/bin/mysql_config
So,
--with-mysql-config=/usr/local/mysql/bin/mysql_config
Well then, let's try this all together now, shall we? It's long...
at the command line:
ruby extconf.rb --with-mysql-include=/usr/local/mysql/include --with-mysql-lib=/usr/local/mysql/lib --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Oops. Error message:
checking for mysql_ssl_set()... /usr/local/lib/ruby/1.8/mkmf.rb:174:in `initialize': Permission denied - mkmf.log (Errno::EACCES)
from /usr/local/lib/ruby/1.8/mkmf.rb:174:in `open'
from /usr/local/lib/ruby/1.8/mkmf.rb:201:in `postpone'
from /usr/local/lib/ruby/1.8/mkmf.rb:541:in `checking_for'
from /usr/local/lib/ruby/1.8/mkmf.rb:600:in `have_func'
from extconf.rb:20
What the hell does that mean?! Well, error messages in Ruby can be a bit cryptic, but mainly because they're so verbose. This just said you don't have the matching permissions with those of the file you're trying access.
So what to do?
Easy! Run the same command again, but start with sudo. (often installing or configuring things at the command line in OS X requires you to do sudo, remember that when simple commands that should work fail.)
sudo ruby extconf.rb --with-mysql-include=/usr/local/mysql/include --with-mysql-lib=/usr/local/mysql/lib --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Password:
(enter your password for your user account)
checking for mysql_ssl_set()... yes
checking for mysql.h... yes
creating Makefile
Done.
Now part 2: The Test.
The documentation says:
ruby ./test.rb [hostname [user [passwd [dbname [port [socket [flag]]]]]]]
Ugly. That's just too many brackets. Too many optional arguments that are usually not optional to get anything done.
hmm... no file mysql.o
let's skip the test and see what happens.
Part 3: Make
Now we run the make file and cross our dirty little fingers.
make
No. No dice.
sudo make
nope, same error. Luckily, I found this earlier and it made sense: http://jlaine.net/2006/10/3/installing-ruby-mysql-driver-on-os-x
What they said was that you need to add the line
#define ulong unsigned long long
in the mysql.c file in the mysql gem's directory. If you are unfamiliar with C, just open the file in TextMate and scroll down to the first instance of #define (you will see it near the top of the file). Insert the line after the second #define statement and you should be fine. While you're there though, just to be safe and secure, add a comment line telling when you added it and why.
Ok, save and close the mysql.c file. Now run make again.
sudo make
Waiting... make often takes time and don't you dare expect to understand half the gobbledy-gook it spits out. Make also tends to have lengthy periods where there is no feedback on progress and all you can do is wait and wonder. This one is a quickie though.
Ok, that was painless (I hope) now make install:
sudo make install
And that should have been super fast.
Now go play with Ruby and MySQL as you should.
CAVEAT EMPTOR: We didn't successfully run the test.rb file. That's too bad. It was designed apparently for compiling the gem from source the old-fashioned way. Or perhaps the unit test is out of date, who knows. But it would be nice to know if everything passes! But sometimes we must live dangerously and as we say in Texas:
If it ain't broke, don't fix it.