- アプリ制作途中にマイグレーションファイルの修正が必要になった。なんとか修正することができたので忘備録として記事にします。
経緯
-
ログイン機能を実装するためdeviseをインストール - 不要な機能をコメントアウトし忘れ
rails db:migrateを実施。 - 実施後に不要な機能を削るため
マイグレーションファイルの修正に取り掛かる。
まずはマイグレーションファイルの修正について検索し、次のコマンドを実施
ターミナル
rails db:rollback
すると以下の様にエラーが発生
Running via Spring preloader in process 89570
== 20220715104214 AddDeviseToUsers: reverting =================================
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
ActiveRecord::IrreversibleMigration
/Users/kuramotokansei/Desktop/sumple_app/db/migrate/20220715104214_add_devise_to_users.rb:49:in `down'
<internal:/Users/kuramotokansei/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
<internal:/Users/kuramotokansei/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
-e:1:in `<main>'
Caused by:
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
/Users/kuramotokansei/Desktop/sumple_app/db/migrate/20220715104214_add_devise_to_users.rb:49:in `down'
<internal:/Users/kuramotokansei/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
<internal:/Users/kuramotokansei/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
-e:1:in `<main>'
Tasks: TOP => db:rollback
(See full trace by running task with --trace)
翻訳してみた
標準的なエラー:エラーが起こりました。これ以降の全てのマイグレーションは中止されました。
中止されたマイグレーションファイルの場所
不可逆なActiveRecordの内容
--traceを実行して完全な痕跡を参照してください。
解決方法
どうやら一度rails db:migrateを実行するとrails db:rollbackが実行出来ないActiveRecordがあるらしい。
今回はローカルのみでチーム開発でないこと、とくにデータベースに保存しているデータなどもないことから以下の方法を試した。ただし、前提としてマイグレーションファイルは 修正済み とする。
rails db:drop #データベースを削除
↓
rails db:create #データベースを作成
↓
rails db:migrate #マイグレーションを実行
マイグレーションが正常に適用されているか確認
rails db:migrate:status
#上記実行結果
Running via Spring preloader in process 90546
database: sumple_app_development
Status Migration ID Migration Name
--------------------------------------------------
up 20220714065607 Create presents
up 20220714080540 Create users
up 20220715104214 Add devise to users
statusがupだとデータベースに反映されている状態らしい
とりあえず今回は理解できていないがなんとか突破できた。今後理解を深め修正していきます。