Capistrano3でRailsアプリをデプロイしている最中です。
VPSの環境は以下です。
さくらのVPS Rails5.1.3 Ruby2.3.1 MariaDB Nginx unicorn database.ymlのエンコードは utf8 です。
開発中にはなにも問題がなかったのですが、デプロイ実行中に「bundle exec rake db:migrate」を実行していて
Mysql2::Error: Invalid default value for 'member_type': CREATE TABLE customers
というエラーが出てデプロイが止まってしまいます。
customersテーブルのmember_typeカラムのデフォルト値を日本語で記述していました。
t.string :member_type, null: false, default: '一般'
そこでMariaDBのエンコードの問題と思いエンコードを以下のように変更しました。
mariaDBの再起動をしました。
VPS側(変更前)
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
VPS側変更後
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
デプロイ元の仮想マシン側は以下のようになっています。
仮想マシン側
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
エンコードを変更しデプロイしてもエラーは解消されませんでした。
そこで前回の質問でご教示いただいたとおり以下のようにデフォルト値を変えてみました。
t.string :member_type, null: false, default: 'normal'
するとこのテーブルでのエラーは発生しませんでしたが、ほかのテーブルで日本語のデフォルト値の部分で同じエラーが出てしまいます。
この状態だとデータベースのカラム値には日本語の登録はできない状態なのではないのでしょうか?
default値が日本語だとエラーが出て、英語だとエラーが出ないということはエンコードの問題と思って変更したのですがうまくいかず上記以外の対応策がわからないのでご教示のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。