Ruby
Windows
MySQL
Socket通信

RubyのMySQLクライアントでUNIXSocket絡みのエラーが出たらホスト名を変えると直る

More than 1 year has passed since last update.

ruby-mysqlでローカルのDBを参照する

Rubyから直接MySQLを触るにはいくつかのgemが利用できます。
試しにlocalのデータベースを触ろうと思って、ruby-mysqlを使い以下の様にクライアントを生成しました。
環境はWindows 10 64bitです。(<- 実はここが大事)

wrong-client.rb
require 'mysql'

client = Mysql.connect('localhost', 'username', 'password', 'dbname')

しかしエラーが...

C:/tools/ruby215/lib/ruby/gems/2.1.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:150:in `block in initialize': uninitialized constant Mysql::Protocol::UNIXSocket (NameError)
    from C:/tools/ruby215/lib/ruby/2.1.0/timeout.rb:76:in `timeout'
    from C:/tools/ruby215/lib/ruby/gems/2.1.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:147:in `initialize'
...(以下略)...

ローカルのDBはhost=127.0.0.1で参照

これは「MySQLでlocalhostと127.0.0.1の違い」で述べられているように、ホストの指定の仕方の間違いによるものでした。

まだ理屈をよく分かっていませんが、とりあえず127.0.0.1を指定すると解消しました。

correct-client.rb
client = Mysql.connect('127.0.0.1', 'username', 'password', 'dbname')

この状況はWindows OSでしか発生しないみたいです。

参考