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

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

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

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

MariaDB

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

解決済

1回答

359閲覧

MySQLエラーの解決方法を教えていただけないでしょうか?

koume

総合スコア458

Ruby on Rails 5

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

MariaDB

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2019/04/23 13:46

編集2019/04/23 16:18

Capistrano3でRailsアプリをデプロイしている最中です。
開発中にはなにも問題がでなかったのですが、デプロイ実行中に「bundle exec rake db:migrate」を実行していますが

Mysql2::Error: Invalid default value for 'member_type': CREATE TABLE customers

というエラーが出てデプロイが止まってしまいます。
customersテーブルのmember_typeカラムのデフォルト値のところのエラーなのでしょうが、何が悪くてエラーとなってしまったのかわかりません。マイグレーションファイルの中身は以下のようになっています。

20170817225634_create_customers.rb class CreateCustomers < ActiveRecord::Migration[5.1] def change create_table :customers do |t| t.string :email, null: false # メールアドレス t.string :email_for_index, null: false # 索引用メールアドレス t.string :family_name, null: false # 姓 t.string :given_name, null: false # 名 t.string :family_name_kana, null: false # 姓(カナ) t.string :given_name_kana, null: false # 名(カナ) t.string :nickname, null: false # ニックネーム t.string :gender # 性別 t.date :birthday # 誕生日 t.string :hashed_password # パスワード t.string :sponsor1, null: false, default: "sss" # 友人 t.string :member_type, null: false, default: "一般"   # ここでエラー発生 t.string :lock, null: false, default: "0" t.string :bonus_lock, null: false, default: "0" t.string :special_lock, null: false, default: "0" t.integer :new_register, null: false, default: 0 t.timestamps end add_index :customers, :email_for_index, unique: true add_index :customers, :nickname, unique: true add_index :customers, [ :family_name_kana, :given_name_kana ] add_index :customers, :sponsor1 add_index :customers, :member_type add_index :customers, :new_register end end

開発中は何も問題はなかったのですが、何がいけないのでしょうか?
どなたかご教示お願いいたします。

追記(エンコードを調べてみました。)

仮想マシン側 +--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+
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/ | +--------------------------+----------------------------+ 変更後 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+

vim /etc/my.cnf.d/server.cnfを開いて[mysqld]の下にcharacter-set-server = utf8mb4を追記して

character_set_databaseとcharacter_set_serverは変更することができました。
しかしcharacter_set_clientとcharacter_set_connectionの変更ができていません。

vim /etc/my.cnf.d/server.cnfを開くと

# # These groups are read by MariaDB server. # Use it for options that only the server (but not clients) should see # # See the examples of server my.cnf files in /usr/share/mysql/ # # this is read by the standalone daemon and embedded servers [server] # this is only for the mysqld standalone daemon [mysqld] character-set-server = utf8mb4 # this is only for embedded server [embedded] # This group is only read by MariaDB-5.5 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don't understand [mysqld-5.5] # These two groups are only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here [mariadb] [mariadb-5.5]

と表示されます。
上のファイルのどこにエンコード変更の記述をすればcharacter_set_clientとcharacter_set_connectionの
エンコードを変更することができるのでしょうか?

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

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

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

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

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

CHERRY

2019/04/23 14:10

一般を Normal のように英数字(ASCII)に変えたら状況は変わりますか? 変わるのであれば、データベースのエンコードは何でしょうか?
koume

2019/04/23 16:21

回答ありがとうございます。エンコードの変更ができていないのに気づきエンコードを変更しましたが、 一部、変更する方法がわからなかったので、その部分を追記いたしました。 お手数をおかけしますが、ご教示のほどよろしくお願いします。 エンコードの変更完了後に試してみたいとおもいます。
koume

2019/04/24 12:39

CHERRY様 回答をいただいた件で、normal と打ち込んで実行すると大丈夫でした。 エンコードは以下のようにしています。 +--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+ このままだと、カラム値に日本語を受け付けないデータベースになってしまうので問題です。 あと、そのほかにチェックするべきポイントはありますでしょうか? よろしくお願いします。
guest

回答1

0

自己解決

vim /etc/my.cnf.d/server.cnf で開いて

[client]
default-character-set = utf8mb4

を追記して再起動をかけると
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

になりました。

投稿2019/04/24 02:42

koume

総合スコア458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問