またお前か。と言いたくなるほどRailsインストールするときにはほぼ必ずMySQL関連のエラーとなります。
An error occurred while installing mysql2 (0.5.3), and Bundler cannot
continue.
In Gemfile:
mysql2
run bundle binstubs bundler
Could not find gem 'mysql2 (~> 0.5)' in locally installed gems.
rails webpacker:install
Could not find gem 'mysql2 (~> 0.5)' in locally installed gems.
Run `bundle install` to install missing gems.
An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling.
エラーコードの言うとおりにコマンドを実行しても解消しないので、解消方法をまとめました。
インストールエラーの解消方法
結論から言うと、下記コマンドにて解消できます。
$ brew install openssl
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
$ bundle install
Railsインストール時に出されるエラーは、これまで冒頭に記載した2種類に遭遇しましたが、どちらも同じコマンドにて解消できました。
エラーコードの解読
いったん、エラーコードに何が書かれているか整理します。
An error occurred while installing mysql2 (0.5.3), and Bundler cannot
continue.
In Gemfile:
mysql2
run bundle binstubs bundler
Could not find gem 'mysql2 (~> 0.5)' in locally installed gems.
rails webpacker:install
Could not find gem 'mysql2 (~> 0.5)' in locally installed gems.
Run `bundle install` to install missing gems.
まとめると「v0.5以上のmysqlのgemを使うように指示されているけどインストールされていないのでbundle install
でインストールしてくれ」とのこと。
もう一つのエラー文も見てみます。
An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling.
「mysql2 (0.5.2)をインストールするときにエラーが発生したので、まずはgem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'
でインストールしてくれ」という意味です。
要はどちらもmysqlのgemを正しくインストールせよ、ということですよね。
ただし、エラー文が示すように愚直にインストールしなおしても解消しないのが今回のミソ。
本当の原因はなにか探る
gemをインストールし直しても解消しないのであれば、別の原因があるはず。
エラー文を読み込むと、下記のような記載がありました。
ld: library not found for -lssl
linker command failed with exit code 1 (use -v to see invocation)
lssl自体が何をしているのか具体的にはわからなかったのですが、どうやらopenssl関連のもののようです。
opensslの設定を確認してみます。
$ brew info openssl
openssl is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.
いろいろ情報が表示されますが、下記のような記載がありました。
openssl is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.
opensslが/usr/localにつながっていないとのことで、これが大本の原因となりエラーに繋がっていたようです。
もともとmacではopensslがデフォルトで繋がっていたのですが、macのOSをSierra以降はLibreSSLに変わっていたとのこと。
この設定が悪さをしていました。
そのため、opensslをインストールしてつなぎ直します。
$ brew install openssl
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
これでインストールが可能になったので、改めてbundle install
を実行します。
Installing mysql2 0.5.3 with native extensions
Bundle complete! 17 Gemfile dependencies, 75 gems now installed.
Bundled gems are installed into `./vendor/bundle`
上記のようにメッセージが表示されてmysqlのgemを含むインストールが完了しました。
コメント