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

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

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

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

Q&A

解決済

1回答

767閲覧

[Ruby on Rails]ローカルにおいて rails db:rollbackを間違えて実行してしまった時

ku-0518

総合スコア13

Ruby on Rails 5

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

1グッド

1クリップ

投稿2019/02/13 09:15

編集2019/02/13 09:23

rollbackをしてdownになったmigrationファイルをupに戻した

Ruby on Railsでチーム開発を行なっています。自分のローカル環境において、誤ってrails db:rollbackコマンドを実行してしまい、既にproduction環境に反映されているmigrationファイルがdownになっていました。

Rails

1$rails db:migrate:status 2 3Status Migration ID Migration Name 4-------------------------------------------------- 5up 2019xxxxxxxxxx Add OOO to OOO 6up 2019xxxxxxxxxx Add OOO to OOO 7up 2019xxxxxxxxxx Add OOO to OOO 8up 2019xxxxxxxxxx Add OOO to OOO 9down 2019oooooooooo Add hoge to piyo ← rollbackしてしまった

試したこと

そこでstatusをupにすれば良いのかなと思い
$rails db:migrate:up VERSION="2019oooooooooo"を実行しstatusがupになっている事を確認しました。
当然自分のローカルにおいてrollbackしてしまったカラムに入っていたデータは消えてしまったのですが、もしこの状態(migrationファイルをdownさせたがもう一度upにした状態)が本番環境に反映されたら、自分のローカル環境の様に、既に本番環境のdbにあるデータは消えてしまいますか...?

あるいは開発と本番のDBに対する認識が間違っているかもしれませんが、、宜しくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

結論からいえば、問題ありません。

db:migrate:statusは、DBのschema_migrationテーブルと、migrationファイルを見比べて、反映されていればup, 反映されていなければdownと表示します。
つまり、migrateとrollbackの操作を記録しているわけではなく、単純にDBとファイルを見比べているだけで、その環境固有のものです。
参考 : https://qiita.com/tkm_kj/items/328da73479a0e348a01e

一方、本番環境へのデプロイ時は、どのようにデプロイしているかは分かりませんが、おそらく実行されるタスクの中にdb:migrateがあって、db:rollbackは無いはずです。

また、本題からは逸れますが、ステージング環境(テスト環境)がもし用意できれば、こういったときに安心ですね。

投稿2019/02/14 02:23

Kta-M

総合スコア456

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

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

ku-0518

2019/02/14 03:39 編集

回答ありがとうございます! 貼って頂いた記事を拝見したところ、おっしゃる通り、 「そのマイグレーションファイル名のバージョンがschema_migrationsのversionカラムに含まれていればdb_listから削除できる -> up(マイグレーション済)。含まれていれば削除できないので down」 と、中のコードと一緒に書かれていましたね。 db:migrate:status が何をやっているのか、一つ具体的に知る事が出来ました。 >ステージング環境(テスト環境)がもし用意できれば、こういったときに安心ですね。 そうですね...。こうした場合に事故を防ぐためのテスト環境ですよね。チーム内でそういう話も出ているので、用意できればと思います。 大変わかりやすい回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問