【問題】
rubyスクリプトからruby-mysqlというgemを使ってMySQLにアクセスしたいのに、以下のエラーが出る
/usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `initialize': No such file or directory - /tmp/mysql.sock (Errno::ENOENT) from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `new' from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `initialize' from /usr/lib/ruby/1.8/timeout.rb:53:in `timeout' from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:164:in `initialize' from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:114:in `new' from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:114:in `connect' from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:49:in `connect' from sample.rb:4
ちなみにsample.rbは
require 'rubygems' require 'mysql' require 'myconf'#ただのconfファイル./myconf.rb client = Mysql.connect(DBHOST, DBUSER, DBPASS, DBNAME)
【原因】
mysql.sockって名前からして、アプリケーションとMySQLをつなげるファイルなんだろーなー...
% ls -la /tmp | grep mysql.sock # やはり無い
ぐぐってもだいたい「/tmp/mysql.sockがあってだな」というエントリばっかりなので「これはもしやLinuxのディストリビューションの問題では?」と思って「Debian mysql.sock」でぐぐったら
% ls -la /var/run/mysqld | grep msyqld.sock
したらあったビンゴ
【解決】
もうちょっと調べなきゃいけない気もするけれど、とりあえずmysql.sockがありゃいいんだろ、的な
% cd /tmp % sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock
で、sample.rb実行したらエラー消えた
【雑感】
mysql.sockとmysqld.sockのちがいをちゃんと調べなきゃ
日本語的に「ソケット」ってどっちだっけ刺す方?刺される方?
DRY