エラーの経緯
- AWSでEC2とRDSは接続できている
- アプリケーションは正常に表示できている
- しかしユーザー登録や投稿を行おうとするとエラーが発生する
環境
- Ruby 2.5.1
- Rails 5.2.3
- AWS EC2+RDS(MySQL)
- Nginx+Unicorn+Capistrano
経緯詳細
- AWSでEC2とRDSは接続できている
AWSサーバー(EC2)にて下記コマンドを実行したところ問題なくmysqlに接続できた。
//AWSサーバー(EC2)
mysql -h RDSエンドポイント -P 3306 -u ユーザ名 -p
アプリケーションは正常に表示できている
EC2で設定したElastic IPにブラウザでアクセスしたところ正常に表示できているユーザー登録や投稿を行おうとするとエラーが発生する
しかしながら上記の通りDBに保存が発生するアクションが発生すると下記のようなエラーが発生する
原因
下記ログを確認したところ文字コードによる文字化けが発生しておりました。
/var/www/アプリケーション名/current/log/production.log
//一部抜粋
F, [2019-06-12T10:04:33.736907 #29116] FATAL -- : [8aa6dabe-fac5-4afa-8c4c-752532c49217] ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE3\x81\xAF\xE3\x82\x80...' for column 'nickname' at row 1: INSERT INTO `users` (`nickname`, `email`, `encrypted_password`, `created_at`, `updated_at`) VALUES ('はむ太郎', 'test@test.com', '$2a$11$AIOoTtfj8lzGvmxnqmHBzO7bpKt8J3fyDe3sCQN0y.DWFW8cF5hHC', '2019-06-12 10:04:33', '2019-06-12 10:04:33')):
//この部分が文字化け箇所
'\xE3\x81\xAF\xE3\x82\x80...'
日本語ではこういった症状が発生するようです。
対策
- パラメータグループの設定
- DBの文字コード変更
- /etc/my.cnfの設定
上記の対応により改善しました。
DB作成前であればパラメータグループの設定のみで文字化けは発生しないようです。
すでにDB作成後であれば他変更も必要となります。
下記や「RDS 文字化け」を検索すると参考になるページが見つかると思います。
MySQL 文字化けを防ぐ、文字コードの確認と設定
日本人ならRDSを使う際にかならずやらなければならないこと
MySQL のテーブルの文字コードを utf8 に変更する
以上です。
いいねやQiitaやTwitterのフォローいただけると励みになります!
お気軽にどうぞ〜
お疲れ様でした!!!
参考ページ
MySQL 文字化けを防ぐ、文字コードの確認と設定
日本人ならRDSを使う際にかならずやらなければならないこと
MySQL のテーブルの文字コードを utf8 に変更する