1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

mysql2をbundle installするとエラーになる(AWS cloud9 Ubuntu18.04)

Last updated at Posted at 2021-05-12

railsのDBをdevelopment, production環境共にMySQLに変えるため
Gemfileにmysql2を記述してbundle installしたらエラーが出たので色々調べてみた。

環境

・Rails 6.0.3
・Ubuntu 18.04
・MySQL 8.0.25

エラー内容

 $ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
.
.
.
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3/ext/mysql2
/home/ubuntu/.rvm/rubies/ruby-2.6.3/bin/ruby -I /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0 -r ./siteconf20210512-4404-8ubcpu.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
checking for -lmysqlclient... no
-----
mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel',
and try again.
-----
*** 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/ubuntu/.rvm/rubies/ruby-2.6.3/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/ubuntu/.rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql2-0.5.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3 for inspection.
Results logged to /home/ubuntu/.rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2

bundle installをしてみると、上のようなエラーが出てきたので
とりあえずググってみると参考になる記事がいくつかヒットしたので
これらを参考にさせて頂き色々試してみた。

【Rails】MySQL2がbundle installできない時の対応方法
Cloud9でRailsプロジェクトを作成しよう
【備忘録】ubuntuでbundle installするとmysqlでこける

やってみたこと

①LDFLAGSやCPPFLAGSの設定を変えてみる

1つ目の記事を参考に下のコードをそのまま実行して、
その後bundle installをしてみた。

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

しかし、最初のbundle installと同じエラーメッセージが出てしまった。
おそらく1つ目の記事はmac OSの場合、有効な方法だったのかもしれない

②sudo yum install mysql-develを実行してみる

次に2つ目の記事を参考に
こちらのコードを実行してみると

$ sudo yum install mysql-devel
sudo: yum: command not found

yumコマンドが見つからないとなったので、
これについても色々と調べると
それっぽいコマンドが見つかったが

そもそもyumはRedhat系のlinuxで使われるパッケージ管理システムで

Debian系のubuntuではaptやapt-getを使うのが普通なので
apt-getで解決できる方法を探すことにした。

③sudo apt-get install libmariadb-dev と libmysqlclient-devを実行してみる

3つ目の記事では

$ sudo apt install libmysqlclient-dev

というコマンドが用いられていたが
Ubuntuのバージョンが違かったので

これを参考にしつつ最初のエラーメッセージにあったヒントを用いることにした。
用いたエラーメッセージを抜粋

-----
mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel',
and try again.
-----

このメッセージには3つのコマンドが書いてあり
3つ目は既に試してある。

残った2つを見てみると参考にした記事にあったコードと似たものがあった。

apt-getから始まるコマンド2つ or yumから始まるコマンド
を実行してみる必要があるとのことだったので

そこで
2つのコマンドを試してみることにした。

$ sudo apt-get install libmariadb-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
.
.
.
(たくさんコードがあって)
.
.
.
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...

$ sudo apt-get install libmysqlclient-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
.
.
.
(たくさんコードがあって)
.
.
.
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...

特にエラーメッセージは発生せず
「これは行けそう!」と思いながら

そのままbundle installを実行

$ bundle install
(色々コードが出てきて)
.
.
.

Bundle complete! 17 Gemfile dependencies, 76 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

「いけたー!」
これにて無事にインストールができた。

#結論

Ubuntu18.04の場合は

$ sudo apt-get install libmariadb-dev
$ sudo apt-get install libmysqlclient-dev

を実行すればbundle installができるようになる。

とりあえず解決はできたが
yumやapt-getの知識が全然ないので調べておく必要があるなと思った。

余談

-----
mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel',
and try again.
-----

最初にこのエラーメッセージを「どれか1つ選んで実行すれば良い」と勘違いして
$ sudo apt-get install libmysqlclient-devだけを実行してしまい
$ bundle exec rails db:createを実行する時に

rails aborted!
LoadError: libmysqlclient.so.20: cannot open shared object file: No such file or directory - /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3/lib/mysql2/mysql2.so

というエラーが起きてしまったので
2つのコマンドを実行しないといけないということが分かりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?