データベースのロールバックとマイグレーション
ユーザーの概念がないときに、記事を保存した。現状の記事は、ユーザーが存在したりしなかったりしている。
ユーザーが存在しない記事はおかしい!!
dbの設定を少し変える👀
そのために、マイグレーションについて深めましょう👏
・dbは、Gitで管理できない!
ファイルの変更をしたから、dbが変わるわけではない!
マスターという状態で、dbが、αという状態だとする。
その後、Aブランチを作り、マイグレーションファイルを作成し実行したとする。そうするとdbが、α状態から、β状態に変わったとする。
このAブランチをマスター状態に戻すと??
dbは、αではなく、βになっている!
dbは、ファイルの状況で変化するものではなく、マイグレーションを実行することで、変わる💨
なので、現在あるマイグレーションファイルを消しても、dbは消えない!なぜなら、マイグレーションファイルは、設計書(説明書)であるから!
マイグレーションファイルを変更しても、dbは変わらない!!
であれば、βからαに戻したいとする。
その時はどうするのか?
railsでは、元に戻すというロールバックというメソッドがある❗️
説明書の作る順番を見て、元に戻してくれる!
現在、記事を作る、ユーザーを作る、idを付与したの三つのマイグレーションファイルが存在する。
ロールバックするには、
ターミナルを開き、ディレクトリを移動
$rails db:rollback
remove_reference(:articles, :user)
ユーザーというディファレンスを作ったけど、消したよ!という意味
db/schema.rb
をみると、もともとユーザーとあったが、消えている😭
これはロールバックした結果です!
$rails db:migrate
とすると、また先ほどロールバックした、ユーザーが追加される。
現在あるマイグレーション3つとももとにもどしたい!!
$rails db:rollback STEP=3
revertingと書いてあるので、全てもとに戻されている(逆行)のがわかります。
drop_table(:articles)
アーティクルというテーブルをなくしている!!
$Article.first
railsコンソールにて確認すると、データがなくなっているのがわかります😆
no such table: articles
アーティクルというテーブルは、ありませんとなっている。
ただし、ロールバックは、開発環境でしかやらない!
本番環境でロールバックをするとデータが消えてしまうから!!!
なので、基本的に本番環境では、マイグレーションファイルを変更できない!変更するためには、データーを消さなければいけない😭
データベースの設計は、一度リリースすると、変更できない!
ので、データベースの設計は重要!!!!