rake aborted! LoadErrorで怒られて、解決できたので備忘録として残しておきます。
#エラー内容
$ 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の => 2番目のuser部分は各個人のユーザー名なので適宜、自身のPCを確認してください。)
$ 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で悩まされたので勉強してみた
もうPermission deniedなんて怖くない!〜linuxのパーミッションについてかなり丁寧に説明してみる〜
パーミッションコマンドを入力すると、
#find /usr -name コマンドで「libmysqlclient.18.dylib」を探す
$ 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コマンドで各情報の表示&トラブルの診断をする。
$ 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つアンインストールしていきます。
#bundle exec gem uninstall [gem名]コマンド
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
を行います。
$ bundle doctor
The following gems are missing
* byebug (10.0.2)
Install missing gems with `bundle install`
とエラーが出るので、エラー内容が示すようにbundle install
をします。
#bundle install
$ 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
で診断しましょう
$ 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
をしましょう。
$ 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
で再診断を行いましょう。
Install missing gems with `bundle install`
bundle installをしてくださいと出るので、bundle install
を行います。
無事にインストールが出来たら、bundle doctorで診断。
#最後にbundle doctor
$ bundle doctor
The Gemfile's dependencies are satisfied
No issues found with the installed bundle
gmes兄弟の依存関係が解消されました。
インストールされたbundleに問題はありません。
と解決できました。
これでrails g
でも、私の場合はデータベースを作成したかったのでundle exec rake db:create
をしました。
$ bundle exec rake db:create
Created database 'sample_development'
Created database 'sample_test'
でエラー解決できました。
###参考記事
Homebrew で MySQL を 5.7.22 から 8.0.11 にバージョンアップしたら Rails が動かなくなったので対処する