【エラー解決】rake aborted! LoadError: dlopen(/Users/user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib

rake aborted! LoadErrorで怒られて、解決できたので備忘録として残しておきます。

#エラー内容

```irb
$ bundle exec rake db:create

rake aborted!
LoadError: dlopen(/Users/user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib
  Referenced from: /Users/user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle
Reason: image not found - /Users/user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle
/Users/user/Projects/chat-space/config/application.rb:7:in `<top (required)>'
/Users/user/Projects/chat-space/Rakefile:4:in `require_relative'
/Users/user/Projects/chat-space/Rakefile:4:in `<top (required)>'
/Users/user/.rbenv/versions/2.3.1/bin/bundle:23:in `load'
/Users/user/.rbenv/versions/2.3.1/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)
```
上記コマンドを入力すると、``/usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib``ファイルが、無いとエラーが出ている。

#パーミッションの確認
次にパーミッションの確認で、以下のコマンドを入力。
（）内の(/Users/user/.rbenvの => <font color="OrangeRed">2番目のuser部分は各個人のユーザー名なので適宜、自身のPCを確認してください。</font>）

```irb
$ ls -l /usr/local/opt/mysql/lib

total 22416
-rw-r--r--   1 USER_NAME  admin  5423052  9 18 18:55 libmysqlclient.21.dylib
-r--r--r--   1 USER_NAME  admin  6041256  6 29 01:42 libmysqlclient.a
lrwxr-xr-x   1 USER_NAME  admin       23  6 29 01:42 libmysqlclient.dylib -> libmysqlclient.21.dylib
-r--r--r--   1 USER_NAME  admin     9624  6 29 01:42 libmysqlservices.a
drwxr-xr-x   3 USER_NAME  admin       96  9 18 18:55 pkgconfig
drwxr-xr-x  91 USER_NAME  admin     2912  6 29 01:42 plugin
```

内容を確認してみると、``/usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib``はなく、``libmysqlclient.21.dylib``がある状態です。

####パーミッションについて参考になった記事
パーミッションについては、以下の記事が参考になりました。
``-rw-r--r--``などの説明についてわかりやすく説明しているの、参考にしてください。


[permission deniedで悩まされたので勉強してみた](https://qiita.com/takuyanin/items/18590600d077df707923)

[もうPermission deniedなんて怖くない！〜linuxのパーミッションについてかなり丁寧に説明してみる〜](http://karoten512.hatenablog.com/entry/2017/12/23/021821)

パーミッションコマンドを入力すると、

#find /usr -name コマンドで「libmysqlclient.18.dylib」を探す

```irb
$ find /usr -name 'libmysqlclient.18.dylib'

ind: /usr/sbin/authserver: Permission denied
find: /usr/local/var/mysql/sys: Permission denied
find: /usr/local/var/mysql/mysql: Permission denied
find: /usr/local/var/mysql/performance_schema: Permission denied

```

``Permission denied``がたくさん表示される。

#bundle doctorコマンドで各情報の表示&トラブルの診断をする。

```irb
$ bundle doctor

The following gems are missing OS dependencies:
 * byebug: /usr/local/opt/gmp/lib/libgmp.10.dylib
 * ffi: /usr/local/opt/gmp/lib/libgmp.10.dylib
 * mysql2: /usr/local/opt/gmp/lib/libgmp.10.dylib
 * mysql2: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib
 * nokogiri: /usr/local/opt/xz/lib/liblzma.5.dylib

```

エラー内容を確認すると、``The following gems are missing OS dependencies:``
と、以下のgemたちは、OSへの依存関係がありません：と出ています。

なので出ているgemsを1つ1つ<font color="OrangeRed">アンインストール</font>していきます。

#bundle exec gem uninstall [gem名]コマンド

```irb
bundle exec gem uninstall byebug

emove executables:
        byebug

in addition to the gem? [Yn]  n
Executables and scripts will remain installed.
Successfully uninstalled byebug-10.0.2

```

最下部に``Successfully uninstalled byebug-10.0.2 ``とアンインストール完了と表示されます。

再度、``bundle doctor``を行います。

```irb
$ bundle doctor

The following gems are missing
 * byebug (10.0.2)
Install missing gems with `bundle install`

```
とエラーが出るので、エラー内容が示すように`bundle install`をします。

#bundle install

```irb
$ bundle install

Fetching gem metadata from https://rubygems.org/.........
Using rake 12.3.1
Using concurrent-ruby 1.0.5
Using i18n 1.1.0
 |
省略
 |
Using uglifier 4.1.19
Using web-console 3.7.0
Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

```

#これで終わりではなく、再度``bundle doctor``で診断しましょう

```irb
$ bundle doctor

The Gemfile's dependencies are satisfied
The following gems are missing OS dependencies:
 * ffi: /usr/local/opt/gmp/lib/libgmp.10.dylib
 * mysql2: /usr/local/opt/gmp/lib/libgmp.10.dylib
 * mysql2: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib
 * nokogiri: /usr/local/opt/xz/lib/liblzma.5.dylib

```

とまた依存関係のないgems兄弟たちが出てくるので、これを再度``bundle exec gem uninstall gem名``コマンドを行います。

順に表示されているものから行い、``Successfully uninstalled gem名``が出来たら、``bundle install``をしましょう。


```irb
$ bundle exec gem uninstall ffi

You have requested to uninstall the gem:
        ffi-1.9.25

childprocess-0.9.0 depends on ffi (>= 1.0.11, ~> 1.0)
rb-inotify-0.9.10 depends on ffi (< 2, >= 0.5.0)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN]  y
ERROR:  While executing gem ... (Gem::DependencyRemovalException)
    Uninstallation aborted due to dependent gem(s)
```

エラーのgems兄弟を1つ1つ``bundle exec gem uninstall gem名``していくと、``bundle doctor``で再診断を行いましょう。

```irb

Install missing gems with `bundle install`

```

bundle installをしてくださいと出るので、``bundle install``を行います。
無事にインストールが出来たら、bundle doctorで診断。

#最後にbundle doctor

```irb
$ bundle doctor

The Gemfile's dependencies are satisfied
No issues found with the installed bundle
```
gmes兄弟の依存関係が解消されました。
インストールされたbundleに問題はありません。
と解決できました。

これで``rails g``でも、私の場合はデータベースを作成したかったので``undle exec rake db:create``をしました。

```irb
$ bundle exec rake db:create

Created database 'sample_development'
Created database 'sample_test'
```
でエラー解決できました。


###参考記事

[Homebrew で MySQL を 5.7.22 から 8.0.11 にバージョンアップしたら Rails が動かなくなったので対処する](https://qiita.com/renny1398/items/5df494a2b2f5d74b24f4)

[MySQLエラー解決法（Mac編)](https://qiita.com/ryouzi/items/7ace711d51ce291702bf)

[permission deniedで悩まされたので勉強してみた](https://qiita.com/takuyanin/items/18590600d077df707923)

[もうPermission deniedなんて怖くない！〜linuxのパーミッションについてかなり丁寧に説明してみる〜](http://karoten512.hatenablog.com/entry/2017/12/23/021821)