I've always done my security settings in MySQL as something like the following:

grant all on somedb.* to lennon@localhost identified by 'mypasswd';
grant all on somedb.* to lennon identified by 'mypasswd';

I think that the problem is that MySQL treats truly "local"
connections (i.e., via the domain socket created on the filesystem by
mysqld) differently from all network connections, even those made over
the loopback interface.

If the Ruby MySQL bindings used the local domain socket instead of TCP
to connect to the MySQL server, you would see the same behavior you do
with the command-line client. Try adding a 'user@localhost' privilege
grant like the above to your database, and see if the connection
works.

Lennon