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