CygwinでインストールしたRubyにrailsを入れてMySQLコネクションのエラー
WindowsのCygwinでインストールしたRubyでgemを使ってrailsをインストールした環境で以下のようなエラーが出ました。
Errno::ENOENT in ItemController#index
No such file or directory - /tmp/mysql.sock
Framework Traceで該当の箇所を調べてソースを見てみると以下のようになっていました。
if (host == nil or host == "localhost") and defined? UNIXSocket then unix_socket = socket || ENV["MYSQL_UNIX_PORT"] || MYSQL_UNIX_ADDR sock = UNIXSocket::new(unix_socket) @host_info = Error::err(Error::CR_LOCALHOST_CONNECTION) @unix_socket = unix_socket else sock = TCPSocket::new(host, port||ENV["MYSQL_TCP_PORT"]||(Socket::getservbyname("mysql","tcp") rescue MYSQL_PORT)) @host_info = sprintf Error::err(Error::CR_TCP_CONNECTION), host end
$RAILS_ROOT/config/database.ymlの中でhostをlocalhostに設定していたのですが、UNIXSocketが定義されていてUNIXSocketを使用して動作しようとしてエラーになっているようです。
hostをループバックアドレスの127.0.0.1とすると動作するようになりました。
UNIXSocketを使用しないようにすれば良さそうなのですが、どこで定義されているのかわからないのでlocalhostに設定しないようにして使用しています。
ちなみにCygwinでインストールしたRubyではなくruby-mswin32版の場合にはこのようなエラーは発生しませんでした。
ご参考まで。
2007-12-07追記
この問題はRailsによるアジャイルWebアプリケーション開発 第2版の「6.1イテレーションA1:動くものを作る」の「設定のテスト」のセクションに記述がありました。