docker環境でrails6アプリを構築し、苦労してようやくEC2上にアプリをデプロイできたと思ったら、
何故かdeviseのユーザー登録時メール認証機能(comfirmable)、お問い合わせメール機能、ゲストログイン機能が500エラー。。。
メールに関する部分だけがエラーになっているからてっきりSMTPサーバーが機能していないのかな?などと推測し、
SESの設定を見直すも・・・・
解決できず。。
原因:RDSで作成したMySQLのDBに日本語が保存できないこと
RDSではDefaultでcharacter-setにlatin1が割り当てられるため、日本語を利用する際はutf8などに変更してあげる必要があったのでした。
そのためRDSで設定したMySQLに関するエラーが発生していました。
それに気づかずてっきりSMTPサーバー関係のエラーだと決めつけて数日もがいてました。。
そもそも私はログイン済みユーザーじゃないと新規投稿機能だったりフォローだったり、全ての機能を利用できないように制限をかけていたので
他のページの確認ができていなかったのですが、
本当はメールに関する部分だけがエラーになっていたのではなくて、
全体がエラーになっていたんだと思います。。。
解決につながったこと:エラーログの確認
エラーがどこで発生しているのか、原因の切り分けも大事ですが、エラーログを確認することが何より最も重要だと気づかされました。
docker環境でつくったアプリをEC2にデプロイしたら、本番環境のみエラーになってしまう。
開発環境ではエラーないのに。
その場合はどこでエラーログを見られるの??
そもそもエラーログ出す方法なんてないんじゃないか??
などと一週間くらいパニック状態でしたが(笑)
ログの出し方が分かったことで2、3時間くらいで解決できてしまいました!!!
エラーログの出し方
[ec2]$ cd /var/www/アプリ名
[ec2]$ docker-compose exec app bash
root@f4658ed2b15e:/var/www/アプリ名# cd /var/www/アプリ名
root@f4658ed2b15e:/var/www/アプリ名# ls
root@f4658ed2b15e:/var/www/アプリ名# cd log
root@f4658ed2b15e:/var/www/アプリ名/log# ls
root@f4658ed2b15e:/var/www/アプリ名/log# tail -f production.log
tail -fを使うことで、ページにアクセスしたときのエラーをリアルタイムで見ることができて便利です。
解決策:RDSの設定変更
下記記事の通りに設定したら解決しました。ありがとうございます!