Rails
nginx
AWS
EC2
RDS

AWS EC2+Rails+Nginx+Unicorn+CapistranoでRDS(MySQL)に接続できているのにデータが保存できない


エラーの経緯


  • 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に保存が発生するアクションが発生すると下記のようなエラーが発生する


エラー画面.png


原因

下記ログを確認したところ文字コードによる文字化けが発生しておりました。


/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 に変更する