#概要
最近Railsの勉強をしているのですが、データベースをデフォルトのSQLiteからmysqlに変えるのにめちゃくちゃハマりましたので自分用メモです。
ちなみにmysql
のバージョンは0.8.16
です。ここが1番ハマるポイントになるのですが。。。
mysql --version
mysql Ver 8.0.16 for osx10.14 on x86_64 (Homebrew)
#rails newコマンドでエラー
rails newコマンドをするとこんなメッセージが帰ってきます。
rails new sample -d mysql
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.
In Gemfile:
mysql2
run bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
作られたsampleのGemfileのmysqlのところをみてみると、
gem 'mysql2', '>= 0.4.4', '< 0.6.0'
要するに自分のローカルのmysqlは0.8.16なのに、範囲が間違っているということですね。
書き換えます。
gem 'mysql2', '>= 0.4.4', '<= 0.8.16'
#bundle installでエラー
ここまできたら、bundle install
で設定を更新します。
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.
In Gemfile:
mysql2
またエラーが出てきました。ここで詰まってググったらどうやら魔法のコマンドがあるらしい。
それがこちら。
bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
意味は全くわからないが、どうやらこれでいけるらしい。
もう一度bundle install
bundle install
Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Bundled gems are installed into `./vendor/bundle`
通った!!!!!
#余談
解決するのにめちゃくちゃ時間かかりました。
mysql
のバージョンを下げることも考えたのですが、めんどくさそうなのでやめました。
同じく苦しんでいる人に届けば幸いです。
もしsequel pro
で繋げる場合は、mysql
のバージョン8からは認証方法が変わっているので変更しないといけません。以下をみるとわかると思います。
参考: https://pqtomblog.com/2018/09/20/connecting_mysql_by_sequelpro/