質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

1813閲覧

Railsのmigrationでデフォルト値を日本語で記述すると受け付けてくれないので解決方法を教えていただけないでしょうか?

koume

総合スコア458

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2019/04/24 14:53

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値が日本語だとエラーが出て、英語だとエラーが出ないということはエンコードの問題と思って変更したのですがうまくいかず上記以外の対応策がわからないのでご教示のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

VPSのMariaDBのエンコードを変更とともに、production用に作成したDB(データベースpanda_production)のエンコードも変更しなければいけなかったでした。
確認方法
データベースにアクセスしMariaDB[none]> use panda_production でpanda_puroductionに切り替え

show variables like 'char%';でエンコードの確認しlatin1のところをutf8mb4に変えて

DBを再起動させて完了です。

vim /etc/my.cnf.d/server.cnf でファイルを編集し変更できます。

投稿2019/04/25 04:16

koume

総合スコア458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

仮想マシン側もMySQLの文字コードをutf8mb4に変更 したら解決するでしょうか?

投稿2019/04/24 17:09

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koume

2019/04/25 03:34

回答ありがとうございます。 変更してみたのですがかわりませんでしたので、ほかにも何か原因があるのかしらべてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問