気ままに

プログラム関連で困ったことを調べて気ままに投稿

【Rails】Mac のMySQLを5.7にアップグレードした時のエラー対処方法

f:id:unot13:20170908162942p:plain# Mysqlのバージョンを5.7にアップグレードした時にハマったので、対処方法をメモ

bundle exec rails

を実行すると以下のようなエラーがでる

.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:94:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'mysql2'. (Bundler::GemRequireError)
Gem Load Error is: uninitialized constant Mysql2::Client::SECURE_CONNECTION

mysql2が古いのかと思って bundle udpate mysql2 を実行してみると変化なし。。。

google先生に聞くと、以下のサイトを教えてくれたので、試してみる。

qiita.com

  • https://github.com/rails/rails/issues/21544
  • Rails(mysql2 adapter)の方で0.3系依存で定義してしまっているので、mysql2最新の0.4.0を受け付けない
  • Gemfileでgem ‘mysql2’, ‘~> 0.3.20'のように0.3系に設定すれば問題ない

とのことなので、Gemfileを以下のように変更

-gem 'mysql2'
+gem 'mysql2', '~> 0.3.20'

に変更してbundle installを実行。するとエラーが変わっている!!!

.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:94:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'mysql2'. (Bundler::GemRequireError)
Gem Load Error is: uninitialized constant Mysql2::Client::SECURE_CONNECTION

これもわからにので、google先生に聞いてみると以下のサイトを教えてくれた。

qiita.com

ということで、以下のファイル(なければ作成)。管理者権限が必要なので、 sudo vim /etc/hosts.allow管理者権限で作成・編集するこを忘れずに

mysqld: ALL: allow

そしてMySQLの再起動

$ mysql.server restart
Shutting down MySQL
.... SUCCESS!
Starting MySQL
.. SUCCESS!

これで無事、bundle exec rails sRailsアプリが起動できました。 前は、brew のリンク先を変えてたりして、対応しましたが、gemの方で対応しているのでgem のバージョン指定するほうが楽ですね。

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails