Help us understand the problem. What is going on with this article?

Ruby On RailsでMySQLのSocketエラーが出た時は素直にlocalhostを127.0.0.1に直すのが一番いいと思う

More than 5 years have passed since last update.

Ruby On RailsでMySQLを使っている時に、

"can't connect to mysql database using /tmp/mysql.socket"

といったエラーが出ることがあります。

これは、MySQL側で使っているsocketと、RubyのMySQLコネクタが使っているsocketが異なっているために発生する現象で、解決策は巷によく載っています。

だいたい書いてあるのは、

1) my.cnfのsocket設定2箇所をいじってMySQL側をRubyに合わせる
2) lib/ruby-mysql***のソースをいじって、Ruby側をMySQLに合わせる

の2つで、直接の原因であるsocket不一致を解消する方法として異存はないですが、

1)は、ほかのアプリ(例えばphpとか)やコマンドに影響でそうでこわい、
2)は、(個人の好みですが)なるべくgemとかで入ってるライブラリを手でさわりたくない

ってことで抵抗があります。

で、上記以外の方法として

3) database.ymlのhostのlocalhostを、127.0.0.1に変更する

というのがあります。

http://q.hatena.ne.jp/1273032729

これは、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に詳しい人の知見求む)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした