読者です 読者をやめる 読者になる 読者になる

RubyからMySQLへの接続

RubyからMySQLへの接続
Rubyからmysqlへ接続するためにアダプタをインストールします。
ですが、通常にgemでインストールしようとしても、以下のようなエラーが発生する場合があります。
例)

[root@example ~]# gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no

extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/bin/ruby
--with-mysql-config
--without-mysql-config
--with-mysql-dir
--without-mysql-dir
--with-mysql-include
--without-mysql-include=${mysql-dir}/include
--with-mysql-lib
--without-mysql-lib=${mysql-dir}/lib
--with-mysqlclientlib
--without-mysqlclientlib
--with-mlib
--without-mlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-zlib
--without-zlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-socketlib
--without-socketlib
--with-mysqlclientlib
--without-mysqlclientlib
--with-nsllib
--without-nsllib
--with-mysqlclientlib
--without-mysqlclientlib


Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out


上記のようなエラーが発生した場合は、以下のようにmysql_configファイルを指定します。
[root@example ~]# gem install mysql -- --with-mysql-config=/usr/bin/mysql_config
Building native extensions. This could take a while...
Successfully installed mysql-2.7
1 gem installed

■ 接続テスト
以下のようなクラスを用意して、接続テストをします。
実行して、指定したテーブルの値が表示されたら成功です。

require 'mysql'

begin
db = Mysql::connect('hostname', 'username', 'passwd', 'testdb')
sql = 'select * from users'
rs = db.query sql

rs.each { |colmuns|
puts colmuns.join("\t")
}
rescue Mysql::Error => e
puts e.error
ensure
rs.free if rs
db.close if db
end

※ require 'mysql'の行でエラーが出た場合
mysql.soへのパスがRubyのLOAD_PATHに入っているか確認します。
LOAD_PATHのディレクトリにmysql.soが入っていない場合は、適宜配置します。

mysql.soを検索
[root@example ~]# find / -name mysql.so

RubyのLOAD_PATH
[root@example ~]# ruby -e 'puts $:'