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

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

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

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

Q&A

解決済

2回答

2636閲覧

マイグレーション履歴を削除して再実行したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

1クリップ

投稿2019/02/26 03:28

編集2019/02/28 00:41

テーブル名やカラムを変更したくなって
まだローカルでしか変更していないときに
わざわざ修正マイグレーションをかくと不要なマイグレーションが増えるし手間もかかるので
テーブルをドロップしてマイグレーションを再実行する手順を覚えたいです

マイグレーション履歴は MySQL 自体がもっていると認識してるんですが
テーブル一覧をみてもそれらしいテーブルが見当たらずどこに保存されているのかよくわかりません

マイグレーションファイルをすでに変更してしまっている場合 rake db:rollback も redo も使えないので
どうすれば履歴を汚さずに書き換えたマイグレーションを再実行できるでしょうか

追記

今回やりたいことは

create_table table_a ...

のようなマイグレーションを

create_table table_b ...

のように書き換えてしまった後 table_a を手動で drop してしまった状態で
table_b を作るマイグレーションを再度走らせたいというものです

手動で table_a を消してなければ rollback や redo が使えたみたいなのですが
マイグレーションの down 実行時に存在しないテーブルを消そうとしてエラーになってしまいます

いつもは少し前のダンプを流し込んでから再度 rake db:migrate を実行していますが
ダンプ以降に追加したレコードがなくなってしまうのと
テーブルやレコードを1つ消すのはUI上からほんの数秒で簡単にできるので
table_a と MySQL 上に保存されている履歴?を消せば再実行してすぐ戻せるのかなと思っているのですが
(認識が間違ってたらすみません)

いずれにしろ1度実行したマイグレーションを再実行しないためにどこかに覚えてるはずで
いつもSQLをダンプするだけでマイグレーションが走るのでおそらくSQL上にあると思ってるのですが
rake db:migrate:status をやるとでてくるリストが
SQL上にあるのかどこかの設定ファイルにかかれてるのかわかればそれを手動で編集したほうが早いかなと思っていて

マイグレーション 履歴 テーブル rails

とか適当なワードで検索しても実態がどこにあるのかわからないので履歴を手動で消す方法を覚えたいです

追記

デプロイしていないローカル内であること前提でmigration内容を修正する本来の手順は
rollback してから書き換えて再実行すべきだったんでしょうか

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

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

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

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

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

guest

回答2

0

ベストアンサー

適当に「rails migration history edit force」で検索しただけですが
How to remove old database migrations in Ruby on Rails
がひっかかりました。

適当に流し読みしただけですが、migration履歴はschema_migrationsテーブルに格納されているようですね

投稿2019/02/27 02:58

asm

総合スコア15149

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

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

退会済みユーザー

退会済みユーザー

2019/02/27 03:06

申し訳ありません探し方が足りませんでした 思いっきりバージョンだけが並んでるテーブルみたいで試しに消してみると rake db:migrate で再実行されました 今度からマイグレーション修正が楽にできそうです ありがとうございます!
guest

0

自分が質問者様の質問の主旨を分かっていないのかもしれませんが、

Ruby

1rake db:migrate:reset

で、一旦、テーブルをドロップしてから、マイグレーションを実行します。
つまり、最新のマイグレーションファイルを使用して、0から作り直します。

投稿2019/02/26 21:20

ReiLeiLei1025

総合スコア236

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

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

退会済みユーザー

退会済みユーザー

2019/02/27 01:58

こんなコマンドがあったのですね いつもコンテナごと初期化してSQLのダンプを流し込んでいました ただ今回は特定のテーブルだけをリセットしたかったので 他のテーブルのレコードが消えると困るケースなので使えなさそうです 回答していただいたのに申し訳ありません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問