LoginSignup
0
0

More than 3 years have passed since last update.

migrateに何度か失敗したあと、勝手にmigirationファイルができたと思い込みファイルを削除してしまった

Last updated at Posted at 2021-04-11

migrationファイルを削除する経緯

sqlにきちんと命名してカラムを作成しようとしていました。
名前の読みがなカラムを「last_name_pronounciation」と命名してテーブルを作ろうとすると

terminal
Mysql2::Error: Specified key was too long; max key length is 767 bytes

と怒られました。(名前が長すぎるようです)

何度か試しているうちに↑(上)矢印キーで過去に入力したコマンドを呼び出していたようで
勝手にmigrationファイルを作ってしまっていました。

terminal
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したら

terminal
================================
-- remove_index(:users, {:column=>:reset_password_token})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

migrationはキャンセルされましたとターミナルから言われました。
db:migrate:statusでmigrationのファイルの状態を調べてみると

terminal
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)ファイルの中身ですが

MigrationID_sample.rb
class Sample < ActiveRecord::Migration[6.0]
  def change
  end
end

をコピーしてお使いください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0