Ruby On RailsでMySQLを使っている時に、
"can't connect to mysql database using /tmp/mysql.socket"
といったエラーが出ることがあります。
これは、MySQL側で使っているsocketと、RubyのMySQLコネクタが使っているsocketが異なっているために発生する現象で、解決策は巷によく載っています。
だいたい書いてあるのは、
- my.cnfのsocket設定2箇所をいじってMySQL側をRubyに合わせる
- lib/ruby-mysql***のソースをいじって、Ruby側をMySQLに合わせる
の2つで、直接の原因であるsocket不一致を解消する方法として異存はないですが、
1)は、ほかのアプリ(例えばphpとか)やコマンドに影響でそうでこわい、
2)は、(個人の好みですが)なるべくgemとかで入ってるライブラリを手でさわりたくない
ってことで抵抗があります。
で、上記以外の方法として
- database.ymlのhostのlocalhostを、127.0.0.1に変更する
というのがあります。
これは、MySQLへの接続を、localhostでなくて、127.0.0.1として接続する方法ですが、
こうすると、通常エラーは解消されます。
なんでだろー、localhostも127.0.0.1も同じじゃねー?って思いますが、以下が参考になります。
http://qiita.com/TanukiTam/items/f6a08740d0fcda0db7be
MySQLは、localhost指定すると、問答無用でsocket接続を試みて、127.0.0.1だと通常のTCP/IP接続をするようです。
なので、3)は、そもそも元凶のsocket通信自体回避する方法です。
直すのあっという間だし、影響も自分のアプリだけなので、3)がいい気がしますが、ググってたどり着く回答は1)、2)が多くて、3)はちょっと控えめって感じです。
Railsに詳しくないので、hostの部分をlocalhostにしておいたほうがよい理由があるのかなー。
(MySQL、Railsに詳しい人の知見求む)