Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

エラーの経緯

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

sakuraniumarete
RailsとGoエンジニア36歳アラフォー/仮想通貨の確定申告サービス開発/既婚/双子の父/エンジニアの方と交流したい/乃木坂・日向坂46が好き/副業案件募集中です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away