BLOGTIMES
2019/10/29

gem mysql から mysql2 に移行してみる

  ruby  mysql 
このエントリーをはてなブックマークに追加

昔書いた Ruby のプログラムを CentOS 7 上で動かそうとしたのですが、MariaDB が 10.4 と比較的新しいバージョンだったので gem で mysql がインストールできないので困ってしまいました。

mysqlを見ると、最終アップデート日が 2013 年になっていて、最近はメンテナンスされていないようです。このまま粘っても解決の見込みも立たないので、mysql2 に移行してしまうことにしました。

ソースの書き換えは大きく3箇所

基本的には以下の3箇所を変更してやれば、基本的な動作はするようです。
Date などの部分を自動的に cast する機能がついたようですが、これは :cast => false でオフにしてあります。

# モジュールの読み込み require 'mysql' require 'mysql2' # 接続 @db = Mysql::connect('localhost', 'user_name', 'pass', 'db_name') @db = Mysql2::Client.new(:host => 'localhost', :username => 'user_name', :password=> 'pass', :database => 'db_name', :cast => false) # 結果の取得 rows.each_hash rows.each

MariaDB 10.4 環境で gem install mysql をすると発生するエラー

$ sudo LANG=C gem install mysql Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for mysql_ssl_set()... yes checking for rb_str_set_len()... yes checking for rb_thread_start_timer()... no checking for mysql.h... yes creating Makefile make "DESTDIR=" gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I. -DHAVE_MYSQL_SSL_SET -DHAVE_RB_STR_SET_LEN -DHAVE_MYSQL_H -I/usr/include/mysql -I/usr/include/mysql/mysql -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -mtune=generic -fPIC -m64 -o mysql.o -c mysql.c mysql.c: In function 'real_connect': mysql.c:276:17: error: 'MYSQL' has no member named 'reconnect' myp->handler.reconnect = 0; ^ mysql.c: In function 'real_connect2': mysql.c:350:6: error: 'MYSQL' has no member named 'reconnect' m->reconnect = 0; ^ mysql.c: In function 'reconnect': mysql.c:920:27: error: 'MYSQL' has no member named 'reconnect' return GetHandler(obj)->reconnect ? Qtrue : Qfalse; ^ mysql.c: In function 'reconnect_set': mysql.c:926:20: error: 'MYSQL' has no member named 'reconnect' GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1; ^ mysql.c: In function 'reconnect': mysql.c:921:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ make: *** [mysql.o] Error 1 Gem files will remain installed in /usr/local/share/gems/gems/mysql-2.9.1 for inspection. Results logged to /usr/local/share/gems/gems/mysql-2.9.1/ext/mysql_api/gem_make.out

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11312
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン