エラーの内容
rails s
をした後、ブラウザを見てみると下記のようなエラーが発生しました↓
Mysql2::Error::ConnectionError
Access denied for user 'root'@'localhost' (using password: NO)
要するに、
パスワードがないからアクセスできないぞ!
ということです。
##エラーの解決方法
エラーの解決方法は2通りあります。
- MySQLで設定したパスワードをdatabase.ymlにベタ書きする。
- rootユーザーのパスワードを空にする。
個人で開発する際は1でもいいのですが、チーム開発となるとチームでパスワードを共通化する必要があり、少し面倒なので今回は2について詳しくやっていきます。1についても簡単に記載します。
##1. database.ymlにベタ書きする。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: #ここにパスワードを書く
socket: /tmp/mysql.sock
一番簡単な解決方法は上記の箇所にパスワードを書くことです。
しかし、GitHubなどのバージョン管理システムにプッシュするとパスワードが露出してしまうので、.envファイルでパスワードを管理し、それを.gitignoreに記載するといった対策が必要になります。
##2. rootユーザーのパスワードを空にする。
MySQLを起動させます。
$ mysql.server start
MySQLにログインします。
$ mysql -u root -p
Enter password: #現在のPWを入力
使用するデータベースを選択します。
mysql> use mysql;
パスワードを空にします。
MySQL 5.7.6でパスワードのカラム名がpasswordからauthentication_stringに変わった点に注意してください。
mysql> update user set authentication_string='' where user='root';
上記のコードが上手くいけば、変更できたことが表示されます。
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
変更が成功したらMySQLを閉じます。
mysql> exit
変更を反映させるためにMySQLを一度ストップします。
$ mysql.server stop
再び起動させます。ストップしずにリスタートでも大丈夫だと思います。
$ mysql.server start
そして、パスワードなしでログインできることを確かめてください。
$ mysql -u root
ログインできたら、もう1度MySQLを閉じてサーバーを起動させてください。
$ rails s
無事エラーが解決されましたね。
お疲れ様でした!
##参考サイト
日々の覚書