migrationファイルを削除する経緯
sqlにきちんと命名してカラムを作成しようとしていました。
名前の読みがなカラムを「last_name_pronounciation」と命名してテーブルを作ろうとすると
Mysql2::Error: Specified key was too long; max key length is 767 bytes
と怒られました。(名前が長すぎるようです)
何度か試しているうちに↑(上)矢印キーで過去に入力したコマンドを呼び出していたようで
勝手にmigrationファイルを作ってしまっていました。
maedatakuo@maedatakudainoMacBook-Air furima-32844 % rails g devise user
Running via Spring preloader in process 19160
invoke active_record
create db/migrate/20210409083100_add_devise_to_users.rb
File unchanged! The supplied flag value not found! app/models/user.rb
勝手にできているのだからと思い考えもせず追加migrationファイルを削除して、
続きでカラム名を考えながらテーブル構築していました(2度かdb:resetもしました)
ようやく名前が決まって最終的にmigrateする段階でmigrationファイルをdownしようとrollbackしたら
================================
-- remove_index(:users, {:column=>:reset_password_token})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:
migrationはキャンセルされましたとターミナルから言われました。
db:migrate:statusでmigrationのファイルの状態を調べてみると
database: furima_32844_development
Status Migration ID Migration Name
--------------------------------------------------
up 000 ********** NO FILE **********
up 20210409081355 Devise create users
MigrationIDが書いてあれば仮ファイルを手作業で複製して通常通り手順に戻ってファイルを削除するのですが、
対処法
db:migrate:reset
再度テーブルをdelite、createし、migrationファイルも作成してくれるコマンドを実行して新しい名前のカラム作成に成功しました。
参考:削除ファイルのMigrationIDが残っていた場合
もし削除ファイルのMigrationIDが000でなくきちんと数値として残っていた場合の対処法
①手作業でmigrationファイルを作成する
②通常の手順に戻ってファイルをrollbackし、ファイルをdownした状態で削除する
①のみ解説します。(②は通常の作業のため割愛)
1)db:migrate:statusを実行
2)削除された(NO FILE)ファイルのMigrationIDをコピー
3)db/migrateフォルダ内に
先ほどコピーしたMigrationIDを使って「20210409081355sample.rb」(*sampleは勝手に考えて入れています)
を作成
4)ファイルの中身ですが
class Sample < ActiveRecord::Migration[6.0]
def change
end
end
をコピーしてお使いください。