4
2

More than 3 years have passed since last update.

MySQLをbundleしようとすると失敗する

Last updated at Posted at 2020-08-25

gem 'mysql2'をbundle出来ない問題

mysql嫌いになりそう。何回も同じエラーで苦しんだので備忘録としてまとめます。

$ bundle
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`.
Fetching gem metadata from https://rubygems.org/............
Using rake 13.0.1
Using concurrent-ruby 1.1.7
Using i18n 1.8.5
Using minitest 5.14.1
Using thread_safe 0.3.6
Using tzinfo 1.2.7
Using zeitwerk 2.4.0
Using activesupport 6.0.2.1
Using builder 3.2.4
Using erubi 1.9.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.10
Using rails-dom-testing 2.0.3
Using crass 1.0.6
Using loofah 2.6.0
Using rails-html-sanitizer 1.3.0
Using actionview 6.0.2.1
Using rack 2.2.3
Using rack-test 1.1.0
Using actionpack 6.0.2.1
Using nio4r 2.5.2
Using websocket-extensions 0.1.5
Using websocket-driver 0.7.3
Using actioncable 6.0.2.1
Using globalid 0.4.2
Using activejob 6.0.2.1
Using activemodel 6.0.2.1
Using activerecord 6.0.2.1
Using mimemagic 0.3.5
Using marcel 0.3.3
Using activestorage 6.0.2.1
Using mini_mime 1.0.2
Using mail 2.7.1
Using actionmailbox 6.0.2.1
Using actionmailer 6.0.2.1
Using actiontext 6.0.2.1
Using arbre 1.2.1
Using formtastic 3.1.5
Using formtastic_i18n 0.6.0
Using has_scope 0.7.2
Using method_source 1.0.0
Using thor 1.0.1
Using railties 6.0.2.1
Using responders 3.0.1
Using inherited_resources 1.11.0
Using jquery-rails 4.4.0
Using kaminari-core 1.2.1
Using kaminari-actionview 1.2.1
Using kaminari-activerecord 1.2.1
Using kaminari 1.2.1
Using polyamorous 2.3.2
Using ransack 2.3.2
Using ffi 1.13.1
Using sassc 2.4.0
Using sprockets 4.0.2
Using sprockets-rails 3.2.1
Using tilt 2.0.10
Using sassc-rails 2.1.2
Using activeadmin 2.7.0
Using public_suffix 4.0.5
Using addressable 2.7.0
Using execjs 2.7.0
Using autoprefixer-rails 9.8.6.2
Using bcrypt 3.1.15
Using bindex 0.8.1
Using popper_js 1.16.0
Using bootstrap 4.5.2
Using bundler 2.1.4
Using byebug 11.1.3
Using regexp_parser 1.7.1
Using xpath 3.2.0
Using capybara 3.33.0
Using mini_magick 4.10.1
Using ruby-vips 2.0.17
Using image_processing 1.11.0
Using carrierwave 2.1.0
Using childprocess 3.0.0
Using coffee-script-source 1.12.2
Using coffee-script 2.4.1
Using coffee-rails 5.0.0
Using orm_adapter 0.5.0
Using warden 1.2.8
Using devise 4.7.2
Using devise-i18n 1.9.1
Using diff-lcs 1.4.4
Using dotenv 2.7.6
Using dotenv-rails 2.7.6
Using enum_help 0.0.17
Using factory_bot 6.1.0
Using factory_bot_rails 6.1.0
Using multipart-post 2.1.1
Using faraday 1.0.1
Using font-awesome-rails 4.7.0.5
Using jquery-ui-rails 6.0.1
Using momentjs-rails 2.20.1
Using fullcalendar-rails 3.9.0.0
Using hashie 4.1.0
Using jbuilder 2.10.0
Using turbolinks-source 5.2.0
Using turbolinks 5.2.1
Using jquery-turbolinks 2.1.0
Using json 1.8.6
Using jwt 1.5.6
Using rb-fsevent 0.10.4
Using rb-inotify 0.10.1
Using listen 3.2.1
Using multi_json 1.15.0
Using multi_xml 0.6.0
Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Errno::EACCES: Permission denied @ rb_sysopen -
/Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/CHANGELOG.md
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

またお前か、、いい加減にしろ。

解決までの道のり

とりあえずエラー文を見ると以下を実行しろとのこと。sudo付けないと権限問題でエラーが出るのでつける。

$ sudo gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'
--source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    current directory: /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
/Users/matsumotoshun/.rbenv/versions/2.6.3/bin/ruby -I /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/2.6.0 -r ./siteconf20200825-6979-21jocc.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... no
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/8.0.21_1/lib
-----
creating Makefile

current directory: /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-19/2.6.0/mysql2-0.5.3/gem_make.out

まあ出来ないんですけど、、、ある記事に
ビルド時にOpenSSL公開鍵のPATH指定が必要」と「bundle configでPATHオプションをLDFLAGS、CPPFLAGSで別々に指定」が必要だとかなんとか、、そうかそうか。分からん。

その記事:https://qiita.com/4EAE_Learner/items/110f7e025b1d842d4bee

まあとりあえずopensslというものが必要らしい。brewでインストール。

$ brew install openssl

次はこいつで公開鍵のpathを確認する。

$ brew info openssl
省略

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"      ← ここ使用
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"   ← ここ使用

省略

なんか出てきた。これがpathみたい?なのでこいつを使うと、、以下のコマンドでパスを指定する。

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl@1.1/include"

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib"

これで出来たはず、、

$ bundle 
Errno::EACCES: Permission denied @ rb_sysopen -
/Users/matsumotoshun/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/CHANGELOG.md
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

出来ねーじゃねーか。パス通ってないの?そしたらこんな記事があった。
https://stackoverflow.com/questions/51264240/rake-dbmigrate-error-with-mysql2-gem-library-not-loaded-libssl-1-0-0-dylib/51269245

この記事によるとやってることは同じみたいだけどgem installのコマンド + mysqlのバージョン指定 + さっきのpath指定でmysqlをインストールできるみたい。

$ gem install mysql2 -v 0.5.3 -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

記事にはmysql2 -v 0.4.10って書いてあるけど、自分のbundle時のエラーでは0.5.3って書いてあったのでそれに合わせる。
どうせ出来ないんだろ?ダメもとでbundleする

$ bundle
Bundle complete! 39 Gemfile dependencies, 132 gems now installed.
Gems in the group production were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

いやできるんかい!汗

4
2
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
4
2