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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

Q&A

1回答

749閲覧

【rails】deviseでテーブル名をカスタマイズした時のmigrate時のエラーについて教えてください

kaori_oka

総合スコア176

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/11 11:54

前提・実現したいこと

勉強でミニアプリを作成しています。
ユーザー管理にdeviseというgemを使用していて、
そのテーブル名をカスタマイズしています。

devise導入の記事など見てると、だいたいusersテーブルで作成してまして、
違う名前で作って見ようと思ったので試してます。

例えば、ownersや、artistsのようなテーブルを作る機会があった時に、
ちゃんとできるのかな?というロケハンです。

その際にマイグレートでコケたので、何が原因なのか、
テーブル名をカスタマイズしたことある方で、気をつける点などあれば聞きたいです。

発生している問題・エラーメッセージ

とりあえず「dog」でファイルを作成してみました。

console

1$ rails g devise dog 2Running via Spring preloader in process 9051 3 invoke active_record 4 create db/migrate/20200311102746_devise_create_dogs.rb 5 create app/models/dog.rb 6 invoke test_unit 7 create test/models/dog_test.rb 8 create test/fixtures/dogs.yml 9 insert app/models/dog.rb 10 route devise_for :dogs

ここは問題なく作成されました。
これを$ rake db:migrateすると、下記のようにコケます。

console

1$ rake db:migrate 2== 20200311102746 DeviseCreateDogs: migrating ================================= 3-- create_table(:dogs) 4 -> 0.0141s 5-- add_index(:dogs, :email, {:unique=>true}) 6rake aborted! 7StandardError: An error has occurred, all later migrations canceled: 8 9Mysql2::Error: Specified key was too long; max key length is 767 bytes 10/Users/okakaori/projects/devise_test/db/migrate/20200311102746_devise_create_dogs.rb:40:in `change' 11 12Caused by: 13ActiveRecord::StatementInvalid: Mysql2::Error: Specified key was too long; max key length is 767 bytes 14/Users/okakaori/projects/devise_test/db/migrate/20200311102746_devise_create_dogs.rb:40:in `change' 15 16Caused by: 17Mysql2::Error: Specified key was too long; max key length is 767 bytes 18/Users/okakaori/projects/devise_test/db/migrate/20200311102746_devise_create_dogs.rb:40:in `change' 19Tasks: TOP => db:migrate 20(See full trace by running task with --trace)

試したこと

DBを確認したところ、dogsテーブルが作成されていましたが、
$ rake db:migrate:statusで確認すると、当該マイグレートファイルがdownでした。
add_indexあたりでコケているので、
$ rake db:drop$ rake db:createして仕切り直しし、
試しにindexを貼っている記述の部分をコメントアウトして
$ rake db:migrateしてみたら問題なく、マイグレートされました。
修正したmigrateファイルは下記です。

rb

1# 20200311102746_devise_create_dogs.rb 2# frozen_string_literal: true 3 4class DeviseCreateDogs < ActiveRecord::Migration[6.0] 5 def change 6 create_table :dogs do |t| 7 ## Database authenticatable 8 t.string :name 9 t.string :email, null: false, default: "" 10 t.string :encrypted_password, null: false, default: "" 11 12 ## Recoverable 13 t.string :reset_password_token 14 t.datetime :reset_password_sent_at 15 16 ## Rememberable 17 t.datetime :remember_created_at 18 19 ## Trackable 20 # t.integer :sign_in_count, default: 0, null: false 21 # t.datetime :current_sign_in_at 22 # t.datetime :last_sign_in_at 23 # t.string :current_sign_in_ip 24 # t.string :last_sign_in_ip 25 26 ## Confirmable 27 # t.string :confirmation_token 28 # t.datetime :confirmed_at 29 # t.datetime :confirmation_sent_at 30 # t.string :unconfirmed_email # Only if using reconfirmable 31 32 ## Lockable 33 # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 34 # t.string :unlock_token # Only if unlock strategy is :email or :both 35 # t.datetime :locked_at 36 37 38 t.timestamps null: false 39 end 40 41 # add_index :dogs, :email, unique: true ←これをコメントアウト 42 # add_index :dogs, :reset_password_token, unique: true ←これをコメントアウト 43 # add_index :dogs, :confirmation_token, unique: true 44 # add_index :dogs, :unlock_token, unique: true 45 end 46end

なぜ、add_indexの箇所でコケたのでしょうか。
deviseを使用したユーザー管理で、テーブル名をカスタマイズしたことある方、
わかる方いたら教えていただきたく。

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

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

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

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

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

guest

回答1

0

エラーからわかりますように、アプリじゃなくてDB(MySQL)の問題ですね。
文字コード確認した方がよさそうです。

https://qiita.com/paranishian/items/06d095fca2f6253b7989

投稿2020/03/12 05:41

rox

総合スコア179

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問