socket 指定を省略できる場合
Rails 4.2 での話(たぶん mysql2 gem を使う他のバージョンの Rails でも同じ)。
config/database.yml
development:
adapter: mysq2
encoding: utf8
username: root
database: myapp_development
socket: '/tmp/mysql.sock'
実は、この socket
の行を削除しても動く。
その条件は、my.cnf
の client
セクションで、きちんと、
my.cnf
[client]
socket = /tmp/mysql.sock
とソケットへのパスが定義されていて、実際に MySQL サーバに接続できること。
普通、この条件は成立しているだろう。よって database.yml
にわざわざ socket の指定をする必要はない。
TCP/IP or Unix ドメインソケット?
socket
行を省略すると、TCP/IP でつながるのかな、とも思ったが、実際には、host
行を省略しているかぎり、自動的に Unix ドメインソケットが選択されるようだ。
ソースコードをみると、
ActiveRecord ->
mysql2 gem ->
MySQL ライブラリの mysql_real_connect()
と呼び出しが連鎖している。
最終的に呼び出される mysql_real_connect() は、host
が NULL
または "localhost"
の場合には、Unix ドメインソケットを使用する。
したがって、database.yml
で host
の指定を省略すれば、自動的に Unix ドメインソケットが使われることになる。