LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

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でしか発生しないみたいです。

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2