【Ruby on Rails】デフォルトのSQLite3ではなくMariaDBにする

【Ruby on Rails】デフォルトのSQLite3ではなくMariaDBにする

Ruby on RailsのDBがデフォルトでSQLite3になっていて途中まで使っていたのですが、本番環境を構築するにあたり、MariaDBにしようと思いたちましたので、手順等記録しておきます。

手順

gemインストール

先ず、普通にGemfileにMariaDBのgemを追記してみました。

gem 'mysql2'

これを追記してbundle installしたところ、以下のエラーが。

Gem files will remain installed in /home/hase_done/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10 for inspection.
Results logged to /home/xxx/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0-static/mysql2-0.4.10/gem_make.out

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10'` succeeds before bundling.

In Gemfile:
 mysql2

促されるまま

gem install mysql2 -v '0.4.10

を叩くと以下のメッセージが。

-----
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try agai-----
*** 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=/home/hase_done/.rbenv/versions/2.4.2/bin/$(RUBY_BASE_NAME)
 --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-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

To see why this extension failed to compile, please check the mkmf.log which can be found here:

/home/xxx/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0-static/mysql2-0.4.10/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/xxx/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10 for inspection.
Results logged to /home/xxx/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0-static/mysql2-0.4.10/gem_make.out

上のmkmf.logを見てみました。

"gcc -o conftest -I/home/xxx/.rbenv/versions/2.4.2/include/ruby-2.4.0/x86_64-linux -I/home/hase_done/.rbenv/versions/2.4.2/include/ruby-2.4.0/ruby/backward -I/home/xxx/.rbenv/versions/2.4.2/include/ruby-2.4.0 -I. -I/usr/local/include -I/home/xxx/.rbenv/versions/2.4.2/include -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wsuggest-attribute=noreturn -Wsuggest-attribute=format conftest.c -L. -L/home/hase_done/.rbenv/versions/2.4.2/lib -Wl,-rpath,/home/xxx/.rbenv/versions/2.4.2/lib -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib/mysql -Wl,-rpath,/usr/local/lib/mysql -L. -L/home/xxx/.rbenv/versions/2.4.2/lib -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,-rpath,/home/hase_done/.rbenv/versions/2.4.2/lib -L/home/xxx/.rbenv/versions/2.4.2/lib -lruby-static -lmysqlclient -lpthread -ldl -lcrypt -lm -lc"
/bin/ld: cannot find -lmysqlclient
collect2: error: ld returned 1 exit status
checked program was:
/* begin */
 1: #include "ruby.h"
 2:
 3: /*top*/
 4: extern int t(void);
 5: int main(int argc, char **argv)
 6: {
 7: if (argc > 1000000) {
 8: printf("%p", &t);
 9: }
10:
11: return 0;
12: }
13: extern void mysql_query();
14: int t(void) { mysql_query(); return 0; }
/* end */

--------------------

ぱっと見時点で良くわからなかったので、とりあえず

gem uninstall mysql2
gem install mysql2

をしてみましたが改善されません。

もう一度ログを見ると

mysql client is missing.
yum install mysql-devel

とあったのでやってみました。

これが原因でした。

この後、

gem install mysql2
bundle install

で問題なくインストール出来ました。

railsがMariaDBを使用する設定

デフォルトではSQLite3を使用するようになっているので、config/database.ymlを修正します。

default: &default
 adapter: mysql2
 encoding: utf8
 reconnect: false
 pool: 5
 username: xxxx
 password: xxxx
 host: localhost
 timeout: 5000

development:
 <<: *default
 database: hoge_dev

test:
 <<: *default
 database: hoge_test

production:
 <<: *default
 database: hoge_prod

DB生成

$ rake db:create
$ rails db
MariaDB > show databases;

DBが生成されていれば完了です。

参考サイト様

http://gdgd-shinoyu.hatenablog.com/entry/2014/10/23/021921

https://qiita.com/MariMurotani/items/a34878916fcabfc3c638

https://qiita.com/namahage1935/items/5b201e6444eb13660709

http://goodbyegangster.hatenablog.com/entry/2017/02/15/215345

http://kkkw.hatenablog.jp/entry/mariadb/bundle-install-mysql2-error

https://qiita.com/yokoto/items/ea3565f92f5eda57151a#_reference-52a1185fe48ebba5e984

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です