僕の場合は、Mac上のdevelopment環境で、複数DB serverを立ち上げて、Railsから複数DBに接続しようとした場合に発生したのですが、
Railsでdatabaseとのconnecing時に、
Can't connect to local MySQL server through socket
のようなsocket fileに関連するErrorが発生しました。
例えばCan't connect to local MySQL server through socket '/tmp/mysql.sock1'
というErrorが発生したとき,Railsは/tmp/mysql.sock1
に接続しにいこうとしたけど,接続できなかったということです。
my.cnf
で指定したsocket fileをrailsで指定してるのになと思ってたのですが、Error messageから推察するに、mysqlのsocketがRailsで指定した/tmp/mysql.sock1
ではない可能性が高いです。
なので、mysql
のsocketがまずどこにあるか調べてみます。
sudo mysqladmin -p version
と打つと、mysql serverに関する情報が表示されます。
mysqladmin Ver 8.42 Distrib 5.6.26, for osx10.10 on x86_64
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.6.26
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 12 hours 7 min 9 sec
UNIX socket
の部分を見ると、mysql serverのsocket fileがpathがわかります。
なので、database.yml
の中身を
socket: /tmp/mysql.sock
と指定し直してあげると
workします。