はじめに
(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
こちらの記事を参考にさせていただき、Rails のオリジナルアプリをAWSを利用しデプロイしようと試みました。
すると、こちらの記事
(デプロイ編②)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
デプロイ編②の「MySQLの設定」でかなり躓いたのでエラー内容と解決した方法を記述する。
エラー内容から解決までの簡単な流れ
ターミナルでEC2インスタンスにログインし、MySQLを起動した状態で
- rake db:create RAILS_ENV=productionを実行 → 「パスワードがないから、アクセスできないよ」とエラーがでる
- コマンドを実行しパスワードを確認する
- 確認したパスワードを database.yml に記述する
- 再度rake db:create RAILS_ENV=productionを実行 → 「パスワードが有効期限切れだよ」とエラーがでる
- パスワードを変更する
- 変更したパスワードを database.yml に記述する
- rake db:create RAILS_ENV=production 実行できた!!
以下でもう少し詳細に説明する
解決のためにやったことを説明
1. rake db:create RAILS_ENV=productionを実行
$ rake db:create RAILS_ENV=production
# エラー文
Access denied for user 'root'@'localhost' (using password: NO)
「パスワードがないからアクセスできないよ」と拒否される。
確かに database.yml の production環境記述 password の部分は空欄になっていた
production:
<<: *default
database: thankshabit_production
username: root
password: # ←ここが空欄
2. コマンドを実行しパスワードを確認する
パスワードがわからないので、こちらのコマンドを実行しパスワードを確認する
$ sudo cat /var/log/mysqld.log | grep 'temporary password'
[Note] A temporary password is generated for root@localhost: XXXXXX
このコマンドを実行し表示された最後の部分「XXXXX」がパスワード。
この部分を database.yml に記述する
3. 確認したパスワードを database.yml に記述する
アプリのディレクトリにいる状態で
$ vi config/database.yml
を実行し、確認したパスワードを database.yml に記載する
production:
<<: *default
database: thankshabit_production
username: root
password: XXXXX # ←ここに記述
4. 再度rake db:create RAILS_ENV=productionを実行
再度実行したらまた別のエラーがでる
$ rake db:create RAILS_ENV=production
# エラー文
Mysql2::Error: Your password has expired. To log in you must change it using a client that supports expired passwords.
「パスワードが有効期限切れだから、変更する必要がある」と言われている。
5. パスワードを変更する
コマンドを実行し、パスワードを変更する
$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
Enter を押す
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y
パスワードを設定するかどうか聞かれているため、「y」+「Enter」
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
新しいパスワードを確認含めて2回入力する
ここで注意なのですが、このパスワードの文字制約がかなり厳しい。
筆者はこちらなどを利用して制約をクリアするパスワードを設定した。
Remove anonymous users? [Y/n] y
... Success!
Disallow root login remotely? [Y/n] y
... Success!
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
全てに「y」+「Enter」で返していく
これでパスワードの新規設定が完了!!
6. 変更後のパスワードを database.yml に記述する
アプリのディレクトリにいる状態で
$ vi config/database.yml
を実行し、先ほど新規に設定したパスワードを記述し直す
production:
<<: *default
database: thankshabit_production
username: root
password: XXXXX # ←ここに新パスワードを記述し直す
7. rake db:create RAILS_ENV=production 実行
$ rake db:create RAILS_ENV=production
無事実行できた!!
最後に
無事にこのつまずきを乗り越えてAWSでデプロイできました。色々な記事などを参考にさせていただきRailsアプリを無事にデプロイできました。
DBについてもネットワークやインフラ面についても理解はまだ浅いですが非常に勉強になりました。
参考にさせていただいた記事、サイトには本当に感謝しかないです。
ありがとうございました。
今回エラー解決に参考にさせていただいた記事↓↓ ありがとうございました!!